0

我有三个类,一个 JFrame 类和两个 JPanel 类。我已经像这样将初始 JPanel 添加到 JFrame

 public JFrame() {

    add(new 1stPanel(this));


    setVisible(true);
    setLayout(null);
}

然后我想在第一个面板中的一个按钮上使用一个动作监听器来删除它并添加另一个类中的另一个面板。我尝试给每个类一个变量并使用简单的 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) 但这也不起作用。当我执行 removeAll() 时,它会删除第一个面板 JPanel 中的所有内容,但随后我无法添加第二个面板。我可以使用什么代码取出第一个面板或第一个面板类并添加另一个类中的第二个面板。我在这里先向您的帮助表示感谢。

4

2 回答 2

4

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

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

于 2013-07-02T10:55:10.043 回答
2

你的代码行

        remove(1p);
        add(2p);
        validate();
        repaint();

您在动作侦听器中调用的对象正在被我怀疑是 JPanel 本身的 this 对象上调用。如果是这样,在扩展 JFrame 的类中定义一个方法,将这些代码放在该方法中,并在动作事件中调用该方法。

于 2013-07-02T10:57:25.007 回答