【发布时间】:2022-01-26 18:16:52
【问题描述】:
在 MacOS 上运行的 Java 程序中创建 AWT Frame 时,框架标题栏中的最大化按钮会最大化窗口:
public static void main(String args[]) {
new Frame();
}
当我创建一个 Swing JFrame 实例时,同一个按钮会将窗口切换到全屏模式,这是 MacOS 上的标准行为。当我将鼠标悬停在该按钮上时,它甚至在视觉上看起来也有所不同:
public static void main(String args[]) {
new JFrame();
}
有什么方法可以用 AWT 的 Frame 复制 JFrame 的“最大化到全屏”行为?我扫描了整个 JFrame 类的代码,但无法识别任何会以这种方式切换 Frame 行为的逻辑。
【问题讨论】:
-
您也许可以利用here 中提到的
com.apple.eawt方法,但我没有尝试过。 -
为什么在这个时代使用 AWT?
-
我想要一个轻巧且尽可能简单的东西,因为我只需要一个带有画布的窗口。其他一切都将通过 Java2D 发生,我不明白为什么我需要 Swing 的所有包袱来打开一个简单的窗口。
-
我尝试通过反射使用
com.apple.eawt,得到以下java.lang.IllegalAccessException:cannot access class com.apple.eawt.FullScreenUtilities (in module java.desktop) because module java.desktop does not export com.apple.eawt to unnamed module @57fffcd7 -
@tyrondis: AFAIK,Java 8 是最后一个完全支持的 SDK; Java 11 丢失了
QuitStrategy,Java 17 没有;作为参考,示例链接到源代码;也可以考虑setUndecorated()。