我正在上课的酒店管理软件上工作,我的代码遇到了一些问题。此时,我只是想将我在单独的类中创建的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
room
RoomSystem room;
即使您确实对其进行了初始化RoomSystem room = new RoomSystem(),您的RoomSystem班级仍然还有另一个问题。您已经遮蔽了阴影roomPanel,因此在尝试调用时,类成员为null getRoomPanel()。在您的构造函数中,更改
RoomSystem room = new RoomSystem()
RoomSystem
roomPanel
getRoomPanel()
// shadowing the class field roomPanel JPanel roomPanel = new JPanel(new FlowLayout()); to roomPanel = new JPanel(new FlowLayout());