【发布时间】:2016-01-29 17:28:34
【问题描述】:
我可以找到很多问题来解决如何获得不计算边框的 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();
这似乎可行,但感觉非常hacky,特别是假设唯一可能用于装饰的空间将通过插图和潜在的菜单栏(仅影响高度)考虑在内。肯定有更好的解决方案吧?
如果没有,那么,希望下次有人遇到此问题时,他们将能够找到我的解决方法。 :)
【问题讨论】: