我有一个外部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);
}
}
发布于 2019-06-02 20:40:42
我使用了BoxLayout,我的问题解决了:
outerPanel.setLayout(new BoxLayout(outerPanel, BoxLayout.Y_AXIS));
发布于 2019-06-02 20:27:56
设置面板的可见性不会将其从网格中删除。
您应该尝试使用以下命令将它们从网格中删除:https://docs.oracle.com/javase/7/docs/api/java/awt/GridLayout.html#removeLayoutComponent(java.awt.Component)
之后,您可能必须设置单元格的首选大小,以便它变得更小,并且中间不会有空格。另一种方法是更新下面的所有面板以上移一个单元格。
使用第二种方法可能会更容易:保留要显示在列表中的面板,从列表中删除要显示的面板,从布局中删除所有面板,并从要显示的面板列表中构建一个全新的布局。
https://stackoverflow.com/questions/56414955
复制相似问题