Java 在没有pack()的情况下调整JFrame的大小会让我大吃一惊。不是很明显

Java 在没有pack()的情况下调整JFrame的大小会让我大吃一惊。不是很明显,java,swing,pack,Java,Swing,Pack,我是计算机科学的学生。我要写一个java程序。在窗口中有两个按钮,点击其中一个按钮会使按钮字体变大+1,所以按钮/按钮变大,它们必须适合窗口(整个两个按钮可见),所以窗口可能会变大,但只需要必要的大小。使用pack()非常简单,但不允许调用pack()方法。有什么线索吗?简单的解决方案是,一旦您更新了按钮的字体,就要重新验证容器,向容器询问它的首选大小。一旦你有了这个值,你需要在窗口的插图中加入这个值,这将为你提供窗口需要的最小大小 // Update button fonts... conta

我是计算机科学的学生。我要写一个java程序。在窗口中有两个按钮,点击其中一个按钮会使按钮字体变大+1,所以按钮/按钮变大,它们必须适合窗口(整个两个按钮可见),所以窗口可能会变大,但只需要必要的大小。使用pack()非常简单,但不允许调用pack()方法。有什么线索吗?

简单的解决方案是,一旦您更新了按钮的字体,就要
重新验证容器,向容器询问它的
首选大小。一旦你有了这个值,你需要在窗口的
插图中加入这个值,这将为你提供窗口需要的最小大小

// Update button fonts...
container.revalidate(); // Force the container with the buttons to update
Dimension size = container.getPreferredSize();
Insets insets = frame.getInsets(); // Returns the frame's border requirements
size.width += insets.left + insets.right;    
size.height += insets.top + insets.bottom;
frame.setSize(size);

现在,您需要确定是否要缩小窗口的大小并使其增大…

这里没有人会为您做作业。我不希望这样。我花了很多时间试图自己解决问题,我所期望的只是一些线索来帮助我自己编写程序。你需要确定可视区域,即没有边框的区域。然后需要确定框架边界,并将其添加到宽度/高度计算中。您可以通过调用按钮的getPreferredSize方法来确定按钮可能需要的空间量。这也是一个很好的答案。你帮助新手的好业力:)我想出了一个办法。我可以计算大小更改前后的差异,然后将其添加到Jframe大小。有趣的是,当字体大小更改为1时,宽度更改为5或6,高度更改为1或2。它不是常数,可能是整数的非断裂性质的原因。您的解决方案看起来更加成熟和专业,所以我将学习:)感谢您快速准确的回答。第一篇文章在这里发表,给了我一个惊喜。当我得到经验时,我会帮助别人:)