如何设置JFrame的最小尺寸并调整框架厚度?
问题描述:
我正在构建一个程序并在多个操作系统上对其进行处理。 Windows 10和Windows 7.当我为Windows 10或Windows 7正确设置最小大小时,它适用于该操作系统,但会混淆其他操作系统。有没有办法让setMinimumSize调整边界厚度?或者有没有办法获得该操作系统边框的厚度?或者有没有办法将JFrame的最小尺寸设置为打开时的大小?任何帮助表示赞赏。谢谢。如何设置JFrame的最小尺寸并调整框架厚度?
答
请勿设置最小尺寸。布局经理的工作是确定组件的大小。布局管理器将在所有操作系统上完成它的工作。
所有你需要做的就是将组件添加到您的面板/帧,然后使用:
frame.pack();
frame.setVisible();
的pack()
方法调用布局管理器,以便所有的组件将是适当的大小。
阅读有关Layout Managers的Swing教程的部分以获取更多信息和工作示例。我建议你将教程加入书签,以便教程所有Swing基础知识。
我不希望用户能够设置框架的大小低于一定的大小。
当一个应用程序告诉我我可以制作框架有多小(大)时,这是非常烦人的。桌面是我的空间,如果我想让它变小(更大),那么你不应该在意。如果我缺少信息,我可以稍后将框架放大(更小)。您的框架设计应该灵活以允许调整大小。
在任何情况下,你可以通过做类似设置最低:
frame.pack();
frame.setVisible();
frame.setMinimumSize(frame.getSize());
答
我只是碰到了使用Java 8 MacOS的这样一个问题,我希望用户能够调整窗口的大小,但服从由布局管理器计算的最小尺寸。不幸的是,控制窗口大小的AWT代码只有在明确设置的情况下才会查看最小大小。
这是我提出的解决方案。我重写在框架上的doLayout()方法:
@Override
public void doLayout()
{
super.doLayout();
LayoutManager m = getLayout();
if (m != null) {
Dimension d = m.minimumLayoutSize(this);
setMinimumSize(d);
}
}
现在,每次布局重新计算时间,新的最小大小被缓存为一个明确的设定值,让AWT会注意它。
我这样做是为了初步设置大小,但是对于程序的持续时间,我不希望用户能够将帧的大小设置为低于特定大小。 –
@GnarlyNwwhal,见编辑... – camickr
好的,谢谢。我将它设置为最小尺寸的原因是因为我创建的游戏是一个集合尺寸。它为所有的精灵使用了BufferedImages,所以我没有办法让它在java中扩展它们。如果您对如何使这一点更好有任何想法,我会非常感激。 –