我有一个带有BorderLayout的框架。在BorderLayout的中心,有一个带有GridLayout的JPanel。有时我必须将此内部JPanel的GridLayout从9x9更改为4x4(或16x16)。但是不幸的是,细胞的大小保持不变。手动调整框架大小后,版式会调整大小,并再次看起来正确。更改为4x4并调整大小后,外观如下:
如何强制内部面板自动更新?我在内部面板(带有GridLayout的面板)和框架上尝试了repaint()。目前,我使用此代码有一些讨厌的副作用:
Dimension size = frame.getSize();
frame.setSize(new Dimension(size.height, size.width+1));
frame.setSize(size);
还有其他方法可以实现这一目标吗?提前致谢!
最佳答案
手动调整框架大小后,版式会调整大小,并再次看起来正确
frame.pack()
而不是根据组件的首选大小设置适合组件的frame.size()
。 frame.setVisible(true)
。 setSize()
并将其留给Layout Manager来决定组件的大小和位置。阅读更多Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?