根据内容的大小设置框架最小尺寸

时间:2016-01-29 17:28:34

标签: java swing layout

我可以找到很多问题来解决如何获得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();

这似乎有效,但感觉非常黑,特别是假设通过插图和潜在的菜单栏(仅影响高度)将考虑专用于装饰的唯一可能空间。当然有更好的解决方案,对吗?

如果没有,那么,希望下次有人遇到此问题时,他们将能够找到我的解决方案。 :)

1 个答案:

答案 0 :(得分:5)

您想要的最小尺寸只是初始包装后的框架尺寸();

frame.pack();
frame.setMinimumSize( frame.getSize() );