我可以找到很多问题来解决如何获得JFrame的“实际”大小而不计算其边界的问题,但这是不同的:我有一个带有一些内容的JFrame,我想设置JFrame的最小值大小,以便其内容窗格不能小于这些内容的大小。简单地做一些像
这样的事情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();
这似乎有效,但感觉非常黑,特别是假设通过插图和潜在的菜单栏(仅影响高度)将考虑专用于装饰的唯一可能空间。当然有更好的解决方案,对吗?
如果没有,那么,希望下次有人遇到此问题时,他们将能够找到我的解决方案。 :)
答案 0 :(得分:5)
您想要的最小尺寸只是初始包装后的框架尺寸();
frame.pack();
frame.setMinimumSize( frame.getSize() );