我正在为课堂开发酒店管理软件,我的代码遇到了一些问题。此时,我只是尝试将我在单独的类中创建的 JPanel 添加到我的主 gui 中。任何帮助将不胜感激。 〜谢谢!
Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at hotelManage.HotelSystem.showGUI(HotelSystem.java:75)
at hotelManage.HotelSystem.<init>(HotelSystem.java:27)
at hotelManage.HotelSystem.main(HotelSystem.java:115)
注意:错误发生在“jpanel.add("Room", room.getRoomPanel());”行
代码:
酒店系统.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class HotelSystem extends JFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1840835913045151061L;
private JFrame mainFrame;
private JPanel mainPanel;
private JButton btnRoom;
private JButton btnCustomer;
private JButton btnOrder;
private JButton btnSearch;
RoomSystem room;
//RoomSystem room = new RoomSystem();
public HotelSystem(){
prepareGUI();
showGUI();
registerListeners();
}
private void prepareGUI(){
mainFrame = new JFrame("Hotel Management System");
mainFrame.setSize(500,500);
mainFrame.setLayout(new GridLayout(1,1));
btnRoom = new JButton("Room Editor");
btnCustomer = new JButton("Customer Editor");
btnOrder = new JButton("Order");
btnSearch = new JButton("Search");
//main panel
mainPanel = new JPanel();
mainPanel.setLayout(new FlowLayout());
mainFrame.add(mainPanel);
mainFrame.setVisible(true);
}
private void showGUI(){
final JPanel jpanel = new JPanel();
jpanel.setBackground(Color.CYAN);
jpanel.setSize(300,300);
CardLayout cLayout = new CardLayout();
cLayout.setHgap(5);
cLayout.setVgap(5);
jpanel.setLayout(cLayout);
JPanel btnPanel = new JPanel(new FlowLayout());
btnPanel.add(btnRoom);
btnPanel.add(btnCustomer);
btnPanel.add(btnOrder);
btnPanel.add(btnSearch);
jpanel.add("Button", btnPanel);
jpanel.add("Room", room.getRoomPanel());
mainPanel.add(jpanel);
mainPanel.setVisible(true);
}
public void registerListeners(){
//register all buttons to self
btnRoom.addActionListener(this);
btnCustomer.addActionListener(this);
btnOrder.addActionListener(this);
btnSearch.addActionListener(this);
} // end registerListeners
public void actionPerformed(ActionEvent e){
System.out.println(e.getActionCommand());
//check all button presses and send
//control to appropriate methods
if (e.getSource() == btnRoom){
} else if (e.getSource() == btnCustomer){
} else if (e.getSource() == btnOrder){
} else if (e.getSource() == btnSearch){
} else {
//lblOutput.setText("something went wrong");
} // end if
} // end actionPerformed
public static void main(String[] args) {
new HotelSystem();
}
}
RoomSystem.java
import java.awt.*;
import javax.swing.*;
public class RoomSystem {
//private JTextField roomName;
private JButton btnEdit;
private JPanel roomPanel;
//private JButton roomCancel;
//array here
public RoomSystem(){
btnEdit = new JButton("Create");
JPanel roomPanel = new JPanel(new FlowLayout());
roomPanel.add(btnEdit);
roomPanel.setVisible(true);
}
public JPanel getRoomPanel() {
return roomPanel;
}
public void setRoomPanel(JPanel roomPanel) {
this.roomPanel = roomPanel;
}
}
jpanel.add("Room", room.getRoomPanel());
你从未初始化过room
RoomSystem room;
即使你初始化它RoomSystem room = new RoomSystem()
,你还有另一个问题RoomSystem
班级。你已经影子了roomPanel
,因此当您尝试调用时,类成员为 nullgetRoomPanel()
。在你的构造函数中,改变
// shadowing the class field roomPanel
JPanel roomPanel = new JPanel(new FlowLayout());
to
roomPanel = new JPanel(new FlowLayout());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)