Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java setVisible(true)更改所有可见实例_Java_Swing_Jpanel - Fatal编程技术网

Java setVisible(true)更改所有可见实例

Java setVisible(true)更改所有可见实例,java,swing,jpanel,Java,Swing,Jpanel,我有一个扩展JPanel的类,当我尝试将该类的一个特定实例设置为visible时,所有其他类也会扩展。想法 在“两个”中心设置为可见之前: “两个”中心设置为可见后: 请注意,所有其他实例都已打开。由于我的代码非常抽象,以下是我能做的最好的代码: 召唤- display.mainScrollPane.getMainPanel().getMachineListPanel().getMachine("two").panel.showPanel(); 没有你的帮助很难说 如果使用的是Borde

我有一个扩展JPanel的类,当我尝试将该类的一个特定实例设置为visible时,所有其他类也会扩展。想法

在“两个”中心设置为可见之前:

“两个”中心设置为可见后:

请注意,所有其他实例都已打开。由于我的代码非常抽象,以下是我能做的最好的代码:

召唤-

display.mainScrollPane.getMainPanel().getMachineListPanel().getMachine("two").panel.showPanel();
没有你的帮助很难说

  • 如果使用的是
    BorderLayout
    ,请注意
    中心的组件将展开以填充可用空间。或者,考虑<代码> BoxLayout < /C>,图解和.
  • 如果要在
    pack()
    setVisible()
    之后添加组件,请确保按照建议执行
    validate()
    repaint()


原因是MachineListPanel实现了GridLayout。根据定义,GridLayout强制所有元素具有相同的高度和宽度,即当其中一个组件的中心设置为可见时,还必须为布局中的所有其他元素分配空间。

您是如何创建这些对象的?最有可能发生的情况是,您有多个引用都指向同一个对象。您使用的是静态变量吗?当我看到像display.mainsrollpane.getMainPanel().getMachineListPanel().getMachine(“两个”).panel.showPanel()这样的调用时,我总是感到兴奋我必须检查该代码。尝试重新设计您的方法。发布SSCCE以获得适当的帮助
GridLayout
会产生这种效果。改用
BoxLayout
。(如果这不能解决问题,请发布SSCCE。)