首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Swing -在setVisible(false)之后保留空格

Swing -在setVisible(false)之后保留空格
EN

Stack Overflow用户
提问于 2019-06-02 20:20:23
回答 2查看 391关注 0票数 -3

我有一个外部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);
   }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-02 20:40:42

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

outerPanel.setLayout(new BoxLayout(outerPanel, BoxLayout.Y_AXIS));
票数 1
EN

Stack Overflow用户

发布于 2019-06-02 20:27:56

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

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56414955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档