我正在上课的酒店管理软件上工作,我的代码遇到了一些问题。此时,我只是想将我在单独的类中创建的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());”行中
编码:
HotelSystem.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
,因此当您尝试调用getRoomPanel()
时,类成员为null。在您的构造函数中,更改// shadowing the class field roomPanel
JPanel roomPanel = new JPanel(new FlowLayout());
to
roomPanel = new JPanel(new FlowLayout());