1

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

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

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

4 回答 4

6

查看方法的javadoc Container#add

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

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

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

使用CardLayout@Andrew 在他的回答中建议的可能是比手动替换面板更好的选择

两个旁注:

  • 学习并尊重 Java 命名约定(例如,类的实例以小写字母开头)。所以你的JPanel1.add电话会变成jPanel1.add
  • 在大多数情况下,不需要扩展JxxxSwing 类。查看您的班级名称JPanel1JPanel2您正在这样做。最好使用可用的 API 自定义这些类,然后扩展它们。
于 2012-09-19T09:08:14.410 回答
3

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

jPanel1.validate();
jPanel1.repaint();
于 2012-09-19T09:08:23.280 回答
3

使用CardLayout ,如此所示。

游戏视图 高分视图

于 2012-09-19T09:32:20.523 回答
0
    newPanel obj = new newPanel ();
    setLayout(new BorderLayout());
    add(obj ,BorderLayout.EAST ,1);//3rd argument is index
    repaint();
    revalidate();
于 2016-08-11T07:18:20.913 回答