Java Swing-设置后仍保留可见(假)空间

Java Swing-设置后仍保留可见(假)空间,java,swing,layout-manager,grid-layout,Java,Swing,Layout Manager,Grid Layout,我有一个外部JPanel,其中包含一个内部面板列表。 我的布局是网格布局 在某些情况下,我想隐形我的一些内部面板。问题是,在我的一些内部面板上设置VisibleFalse后,它们确实消失了,但它们以前占用的空间仍然存在,并且不会消失,因此,它会创建空白 如何删除这些空白,并使所有可见的内部面板排序一个接一个没有任何空白在他们之间 outerPanel.setLayout(new GridLayout(4, 1)); outerPanel.add(pnl1); outerPanel.add(pnl

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

在某些情况下,我想隐形我的一些内部面板。问题是,在我的一些内部面板上设置VisibleFalse后,它们确实消失了,但它们以前占用的空间仍然存在,并且不会消失,因此,它会创建空白

如何删除这些空白,并使所有可见的内部面板排序一个接一个没有任何空白在他们之间

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));

我知道这一点,但我不想移除它们。有没有办法在不移除的情况下执行此操作?我不太清楚舒尔是否可以执行此操作,但您可以尝试将电池的最大高度设置为0或1。因此,它实际上不会被删除,而是仅以1个像素显示。如果使用GridLayout不起作用,可以尝试MigLayout,它功能更强大,是eclipse和window Builder中的默认布局。我尝试MigLayoutHanks人,我使用了BoxLayout,我的问题得到了解决。顺便说一下,我没有给你负面评价,我不知道是谁干的。。。他们也给了我2个负面评价,因为你忘了在移除后调用重新喷漆和重新验证components@HovercraftFullOfEels组件可见后,GridLayout将无法正确重新验证。我认为它也会起作用,但它不会。@hoverskifulofeels不,我不会忘记这些,试试GridLayout,你会看到会发生什么。我的问题出了什么问题,我得到了否定点?我认为这很有用