繁体   English   中英

Swing - 在 setVisible(false) 之后留有空白

[英]Swing - After setVisible(false) white space remains

我有一个外部 JPanel,其中包含一个内部面板列表,我的布局是GridLayout

在某些情况下,我想使我的一些内部面板不可见。 问题是,在我对一些内部面板执行setVisible(false)之后,它们确实消失了,但它们之前占用的空间仍然存在并且不会消失,因此它会产生空白。

如何删除那些空白并使所有可见的内部面板一个接一个地排序,而它们之间没有任何空白?

outerPanel.setLayout(new GridLayout(4, 1));
outerPanel.add(pnl1);
outerPanel.add(pnl2);
outerPanel.add(pnl3);
outerPanel.add(pnl4);

private void invisibleSome(){
 Component[] cmpts = outerPanel.getComponents();
   for(int i = 0; i< cmpts.length; i++){
       //this make some components invisible 
       //but their white space still remains
       cmpts[i].setVisible(i%2 == 0);
   }
}

我使用了BoxLayout并解决了我的问题:

outerPanel.setLayout(new BoxLayout(outerPanel, BoxLayout.Y_AXIS));

设置面板的可见性不会将它们从您的网格中删除。

您应该尝试使用以下方法从网格中删除它们: https://docs.oracle.com/javase/7/docs/api/java/awt/GridLayout.html#removeLayoutComponent(java.awt.Component)

之后,您可能必须设置单元格的首选大小,使其变得更小,并且您之间没有空格。 另一种方法是更新下面的所有面板以向上移动一个单元格。

使用第二种方法可能会更容易保留您想要显示在列表中的那些,从列表中删除您想要的,从布局中删除所有面板并从您想要的面板列表中构建一个全新的布局显示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM