添加的JPanel到按钮后,另一个JPanel中单击
问题描述:
我使用NetBeans IDE使一个GUI应用程序。我有一个JPanel里面的JFrame。点击按钮后,我想在第一个内部显示不同的JPanel。另一个JPanel在另一个文件中。我会如何去做这件事?如果这是不实际的,我不介意与第二个更换第一的JPanel。添加的JPanel到按钮后,另一个JPanel中单击
我试过以下,但它似乎并没有工作。我是新来的Java和GUI编程,所以我希望得到任何帮助我能。
private void jButtonActionPerformed(java.awt.event.ActionEvent evt) {
JPanel2 jPanel2 = new JPanel2();
JPanel1.add(jPanel2);
}
答
参见Container#add
方法的Javadoc:
此方法更改布局相关的信息,因此,无效组件层次结构。如果容器已经被显示,层级必须此后,以显示所添加的分量验证。
因此,仅添加面板是不够的,但您还必须再次验证层次结构,例如,通过调用
JPanel1.validate();
JPanel1.repaint();
使用CardLayout
作为@Andrew在他的回答表明可能是一个更好的选择,然后手动更换面板
两个并排的注意事项:
- 了解和尊重的Java命名约定(例如一个类的实例以小写字母开头)。因此您的
JPanel1.add
呼叫将变为jPanel1.add
- 在大多数情况下,不需要扩展Swing类
Jxxx
。看着你的类名JPanel1
和JPanel2
你正是这样做。最好使用可用的API来自定义这些类,然后再扩展它们。
答
您还必须添加以下代码,如您更改生效:
jPanel1.validate();
jPanel1.repaint();
答
newPanel obj = new newPanel();
setLayout(new BorderLayout());
add(obj ,BorderLayout.EAST ,1);//3rd argument is index
repaint();
revalidate();
+1
你能解释为什么这段代码回答这个问题吗? –
+1的'CardLayout'很好的建议。看到代码后,我忘记了最初的要求,或者我会建议我自己(将立即更新我的答案) – Robin
@mKorbel确实,忘记即使这样做。更正 – Robin