如何设置JFrame的最小尺寸并调整框架厚度?

时间:2016-04-21 01:26:35

标签: java swing

我正在构建一个程序并在多个操作系统上进行处理。 Windows 10和Windows 7.当我为Windows 10或Windows 7正确设置最小大小时,它适用于该操作系统但会混淆其他操作系统。有没有办法让setMinimumSize调整边框厚度?或者有没有办法在该操作系统上获得边框的厚度?或者有没有办法将JFrame的最小大小设置为打开时的大小?任何帮助表示赞赏。感谢。

2 个答案:

答案 0 :(得分:4)

不要设置最小尺寸。布局管理器的工作是确定组件的大小。布局管理器将在所有操作系统上完成其工作。

您需要做的就是将组件添加到面板/框架中,然后使用:

frame.pack();
frame.setVisible();

pack()方法调用布局管理器,以便正确调整所有组件的大小。

阅读Layout Managers上Swing教程中的部分,了解更多信息和工作示例。我建议你将教程书签为教程所有Swing基础知识。

  

我不希望用户能够将帧的大小设置为低于特定大小。

当一个应用程序告诉我有多小(大)我可以制作框架时,这是非常烦人的。桌面是我的空间,如果我想让它更小(更大),那么你不应该关心。如果我缺少信息,我可以稍后将框架放大(更小)。您的框架设计应该灵活,以允许调整大小。

在任何情况下,您都可以通过执行以下操作来设置最小值:

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

答案 1 :(得分:-1)

我刚刚在使用Java 8的macOS上遇到了这样的问题。我希望用户能够调整窗口大小,但要遵守布局管理器计算的最小大小。不幸的是,控制窗口大小的AWT代码只有在显式设置时才会查看最小大小。

这是我提出的解决方案。我重写了框架上的doLayout()方法:

library(quantmod)

stk <- suppressWarnings(getSymbols("AAPL", auto.assign = FALSE,
                                   src = "yahoo", periodicity = "daily"))
stk <- na.omit(stk)

stk.lm1 <- lm(log(Cl(stk)) ~ c(1:nrow(stk)), data = stk)
plot(index(stk), log(Cl(stk)), type = "l", lwd = 3, las = 1)
abline(coefficients(stk.lm1)[1], coefficients(stk.lm1)[2], col="blue")

现在,每次重新计算布局时,新的最小大小都会被缓存为显式设置值,因此AWT会关注它。