【发布时间】:2019-06-02 12:20:23
【问题描述】:
我有一个外部 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);
}
}
【问题讨论】:
-
删除组件后忘记调用
repaint()和revalidate() -
@HovercraftFullOfEels
GridLayout在组件可见后不会正确地revalidate()。我认为它也会起作用,但它没有。 -
@HovercraftFullOfEels 不,我不会忘记那些,试试 GridLayout,你会看到会发生什么
-
我得到负分的问题有什么问题?我觉得很有用
标签: java swing layout-manager grid-layout