我有三个类,一个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类,并添加另一个类中的第二个面板。 感谢您的帮助。
答案 0 :(得分:4)
尝试使用CardLayout
和交换卡(面板)。
问题是创建add(new 1stPanel(this))
。您添加一个局部变量,然后使用类的字段。
答案 1 :(得分:2)
您的代码行
remove(1p);
add(2p);
validate();
repaint();
你在动作监听器中调用的是在这个对象上调用的,我怀疑它是JPanel本身。如果它是在类中定义一个扩展JFrame的方法,则将这些代码放在该方法中,并在action事件中调用该方法。