我有一个带有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?
  • 09-10 10:09
    查看更多