我可以找到很多问题来解决如何获取 JFrame 的“真实”大小(不计算其边框)的问题,但这是不同的:我有一个包含一些内容的 JFrame,并且我想设置 JFrame 的最小值大小,使其内容 Pane 不能小于这些内容的大小。只需做类似的事情
setMinimumSize(getContentPane().getPreferredSize())
当然,这是行不通的,因为框架的大小包含了它的边框、任何菜单栏等——所以您仍然可以将框架缩小到足够小,以致部分内容被剪掉。所以我想出了这个解决方案:
// Set minimum size so we can't resize smaller and hide some of our
// contents. Our insets are only available after the first call to
// pack(), and the second call is needed in case we're too small.
pack();
Dimension contentSize = getContentPane().getPreferredSize();
Insets insets = getInsets();
Dimension minSize = new Dimension(
contentSize.width + insets.left + insets.right,
contentSize.height + insets.top + insets.bottom +
(getJMenuBar() != null ? getJMenuBar().getSize().height : 0));
setMinimumSize(minSize);
pack();
这似乎有效,但感觉非常老套,特别是假设将通过插图和潜在的菜单栏(仅影响高度)考虑专用于装饰的唯一可能的空间。当然有更好的解决方案,对吗?
如果没有,那么,希望下次有人遇到此问题时,他们能够找到我的解决方案。 :)
最佳答案
您想要的最小尺寸就是执行初始 pack() 后框架的尺寸;
frame.pack();
frame.setMinimumSize( frame.getSize() );
关于java - 根据内容的大小设置框架最小尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35090492/