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

标签 java swing layout

我可以找到很多问题来解决如何获取 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/

相关文章:

Java用户输入?

java - Eclipse初始化一分钟后调用一个类

java - 如何通过 Volley 将旋转器数据发送到数据库

java - JSON 文本到 Java 的转换问题与随机数生成

Java Swing MVC问题

Java:为 JFrame 及其组件添加 KeyListener

java - JXTable 和滚动条上方的标题单元格

html - Div 使表格变大而不是滚动条

android - 如何在android中使用按钮 TextView 等创建自定义下拉/弹出 View

java - 在 GridBagLayout 中制作滚动条