按钮单击后将JPanel添加到另一个JPanel

时间:2012-09-19 09:06:49

标签: java swing netbeans runtime jpanel

我正在使用Netbeans IDE制作一个gui应用程序。我有一个内置JPanel的JFrame。单击按钮后,我想在第一个内部显示不同的JPanel。另一个JPanel在另一个文件中。我该怎么做呢?如果这不实用,我不介意用第二个替换第一个JPanel。

我尝试了以下但是它似乎不起作用。我是Java和Gui编程的新手,所以我很感激我能得到的任何帮助。

private void jButtonActionPerformed(java.awt.event.ActionEvent evt) {        
    JPanel2 jPanel2 = new JPanel2();
    JPanel1.add(jPanel2);
}

4 个答案:

答案 0 :(得分:6)

请参阅Container#add方法的javadoc:

  

此方法更改与布局相关的信息,因此使组件层次结构无效。如果已显示容器,则必须在此后验证层次结构,以显示添加的组件。

因此,添加面板是不够的,但您还必须再次验证层次结构,例如通过调用

JPanel1.validate();
JPanel1.repaint();

在他的回答中使用CardLayout作为@Andrew建议可能是一个更好的选择,然后手动替换面板

两个附注:

  • 学习并尊重Java命名约定(例如,类的实例以小写开头)。因此,JPanel1.add来电将成为jPanel1.add
  • 在大多数情况下,无需扩展Jxxx Swing类。查看您的班级名称JPanel1JPanel2,您正是这样做的。最好使用可用的API来自定义这些类,然后再扩展它们。

答案 1 :(得分:3)

您还必须添加以下代码,例如更改才能生效:

jPanel1.validate();
jPanel1.repaint();

答案 2 :(得分:3)

使用CardLayout,如图here所示。

Game view High Scores view

答案 3 :(得分:0)

    newPanel obj = new newPanel ();
    setLayout(new BorderLayout());
    add(obj ,BorderLayout.EAST ,1);//3rd argument is index
    repaint();
    revalidate();