我有一个带有BorderLayout的框架。在BorderLayout的中心,有一个带有GridLayout的JPanel。有时我必须将这个内部JPanel的GridLayout从9x9更改为4x4(或16x16)。但不幸的是,细胞的大小保持不变。手动调整框架大小后,布局会调整大小,然后再次显示正确的大小。以下是更改为4x4后和调整大小后的样子:
如何强制内部面板自动更新?我尝试在内部面板(具有GridLayout的那个)和框架上重绘()。目前我使用的代码有一些令人讨厌的副作用:
Dimension size = frame.getSize();
frame.setSize(new Dimension(size.height, size.width+1));
frame.setSize(size);
还有其他方法可以达到这个目的吗?提前谢谢!
答案 0 :(得分:2)
手动调整框架大小后,布局会调整尺寸并再次看起来正确
使用frame.pack()
代替根据其首选尺寸设置适合组件的frame.size()
。
在添加所有组件后,最后调用frame.setVisible(true)
。
永远不要为组件调用setSize()
,并让布局管理器决定组件的大小和位置。
了解更多Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?