我正在上课的酒店管理软件上工作,我的代码遇到了一些问题。 此时,我只是想将我在单独的类中创建的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;
    }




}

===============>>#1 票数:3 已采纳

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());

  ask by user3552931 translate from so

未解决问题?本站智能推荐:

1回复

为什么这些卡片没有出现在JPanel CardLayout上?

我的应用程序包含两个JPanel ,它们将成为MainPanel上的MainPanel 。 代码如下。 出于某种原因,面板不会出现。 我非常感谢你的帮助:) MainPanel.java: Main.java:
1回复

CardLayout中显示的JPanel错误。 getGraphics()的问题

我有一个称为SpacePotaters(JFrame的子类)的顶级GUI类,并将一个名为panelViews(使用CardLayout布局管理器)的JPanel添加到其内容窗格中。 除其他外,我将MainMenu对象(JPanel的子类)和GameView对象(JPanel的子类)添加为pan
2回复

CardLayout,在JFrame或JPanel中?

我必须为学校制作一个游戏,并且单击JButton切换JPanels时遇到了一些麻烦。 我想使用CardLayout,但是我是Java的新手,所以很难。 我的目标是将所有面板都放在不同的类中,例如类“ Panel 1”,类“ Panel 2”等(而不是在主(JFrame)类中创建我的JPane
1回复

从CardLayout更新JPanel

我正在使用CardLayout来显示另一个类的JPanel : 如何在布局中更新/删除“ ReadMsg Card”面板,因为一旦添加变量id, type, sender它们都保持不变?
1回复

CardLayout中有2个以上的可见JPanel

我同时将两个以上面临的问题JPanel对象在CardLayout 它们是在同一时间可见 。 尽管我可以放置许多面板,但是它们不会同时出现,因此无法根据需要调整其大小。 为了更清楚地了解我想要的内容,我添加了一个测试图像。
1回复

无法更新CardLayout中的JPanel

我有两个JPanel嵌套在cardPanl(带有cardLayout)中。 在页面之间切换时,我需要创建新页面实例。 例如,当我从homePage切换到captchaPage时,我将用新的'HomePage'实例替换当前的homePage。 从captchaPage切换到homePag
1回复

切换cardLayout后JPanel无法关闭

我有多个JPanels我cardLayout 。 当我切换到另一个JPanel它不会关闭以前的JPanels并且在使用该程序后,我同时打开了许多JPanels : 这是主文件:
3回复

使用Cardlayout切换到特定的JPanel

我开始使用netbeans开发Java桌面应用程序。 我有7个不同的屏幕,并代表他们我正在使用JPanel 。 一个JPanel代表它们,一个代码包含所有它们(命名为mainPanel),它位于JFrame中。 mainPanel使用Cardlayout来切换屏幕(JPanels)。 我
4回复

如何设置JFrame大小以适合显示JPanel的CardLayout?

我在CardLayout中有一个包含一组JPanels的JFrame 。 每个JPanel都有不同的大小,我希望JFrame适应当前显示的JPanel的大小(而不是JPanel以适应JFrame的大小)。 我怎样才能做到这一点?
2回复

使用CardLayout切换后如何启动JPanel

所以我正在用Swing开发游戏。 我的主游戏在一个名为Board的JPanel中,而开始屏幕是一个名为StartScreen的JPanel,我还制作了一个名为MainPanel的JPanel,其CardLayout布局用于在两个面板之间进行切换。 主面板: 我的问题是,一旦我初始