如何从不同的类切换JPanels

时间:2013-07-02 10:45:37

标签: java swing jpanel

我有三个类,一个JFrame类和两个JPanel类。我已将初始JPanel添加到JFrame中,如此

 public JFrame() {

    add(new 1stPanel(this));


    setVisible(true);
    setLayout(null);
}

然后我想在第一个面板的按钮上使用actionlistener来删除它并添加另一个类中的另一个面板。我尝试给每个类一个变量,并使用简单的remove()和add(),如下所示:

private 1stpanel 1p;
private 2ndpanel 2p;

btn.addActionListener((new ActionListener(){
        public void actionPerformed(ActionEvent  e)
            {
            remove(1p);
            add(2p);
            validate();
            repaint();
            }
        }));

这不起作用我也试过使用JFrame.remove(1p),但这也不起作用。当我删除所有()它删除1stpanel JPanel中的所有内容,但后来我无法添加第二面板。 我可以使用什么代码取出第一个面板或1stpanel类,并添加另一个类中的第二个面板。 感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

尝试使用CardLayout和交换卡(面板)。

问题是创建add(new 1stPanel(this))。您添加一个局部变量,然后使用类的字段。

答案 1 :(得分:2)

您的代码行

        remove(1p);
        add(2p);
        validate();
        repaint();
你在动作监听器中调用的

是在这个对象上调用的,我怀疑它是JPanel本身。如果它是在类中定义一个扩展JFrame的方法,则将这些代码放在该方法中,并在action事件中调用该方法。