【问题标题】:Set frame minimum size based on size of contents根据内容大小设置框架最小尺寸
【发布时间】: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,特别是假设唯一可能用于装饰的空间将通过插图和潜在的菜单栏(仅影响高度)考虑在内。肯定有更好的解决方案吧?

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

【问题讨论】:

    标签: java swing layout


    【解决方案1】:

    你想要的最小尺寸就是你做初始 pack() 之后的框架尺寸;

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

    【讨论】:

    • 现在我怎么没想到呢?比我的解决方案要好得多。
    猜你喜欢
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 2018-07-20
    相关资源
    最近更新 更多