【发布时间】:2011-10-15 23:00:05
【问题描述】:
我如何(本机)在 Java 应用程序中实现 OSX Lion 的全屏功能?
当前给出的答案包含一种实现全屏功能的好方法。我读过 Eclipse 可能能够使用 Lion 的“本机”全屏功能。这就是我要问的。
【问题讨论】:
标签: java macos fullscreen osx-lion
我如何(本机)在 Java 应用程序中实现 OSX Lion 的全屏功能?
当前给出的答案包含一种实现全屏功能的好方法。我读过 Eclipse 可能能够使用 Lion 的“本机”全屏功能。这就是我要问的。
【问题讨论】:
标签: java macos fullscreen osx-lion
对于那些不介意快速而肮脏的解决方案的人:
从 Frame 构造函数调用 getRootPane().putClientProperty("apple.awt.fullscreenable", Boolean.valueOf(true))。这就是setWindocCanFullScreen 所做的。
【讨论】:
我不知道本机,但 Java 确实支持全屏应用程序而不需要本机代码:
http://saipullabhotla.blogspot.com/2012/05/enabling-full-screen-mode-for-java.html
问题是 Apple 是否在他们的 JDK 中使用 Lion 实现了这一点。
【讨论】:
您想要做的事情可以通过 com.apple.eawt 库来完成。此外,如果您还将应用程序部署在其他操作系统(如 Windows、Linux 等)上,为了避免通过反射编写代码。您应该使用并分发嵌入在您的应用程序中的来自 Apple 的 AppleJavaExtensions.jar。
这是使框架可全屏扩展的方法:
FullScreenUtilities.setWindowCanFullScreen(window,true);
这是切换全屏的方法:
Application.getApplication().requestToggleFullScreen(window);
其中参数 window 是您尝试实现全屏显示的应用程序的 JFrame。
要查看示例应用程序,请查看RationalPlan Project。
【讨论】:
我在 Apple 的 Java 发行说明中发现了这一点:
Mac OS X 10.7 Lion 全屏支持
Lion 上的 Java 应用程序现在可以选择每个窗口的全屏窗口功能。开发人员可以使用 com.apple.eawt.FullScreenUtilities 类将窗口标记为能够全屏,并使用 com.apple.eawt.Application.requestToggleFullScreen(Window)以编程方式请求窗口进入和退出全屏模式的方法。此 API 在 Mac OS X 10.6 Snow Leopard 上不执行任何操作。
更明确地说,尝试尽早从 JFrames 的构造函数中调用它...
/**
* @param window
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static void enableOSXFullscreen(Window window) {
Preconditions.checkNotNull(window);
try {
Class util = Class.forName("com.apple.eawt.FullScreenUtilities");
Class params[] = new Class[]{Window.class, Boolean.TYPE};
Method method = util.getMethod("setWindowCanFullScreen", params);
method.invoke(util, window, true);
} catch (ClassNotFoundException e1) {
} catch (Exception e) {
log.log(Level.WARNING, "OS X Fullscreen FAIL", e);
}
}
【讨论】:
请向 Apple 提交错误报告。他们在 OS X 上维护 Java,它应该符合他们发布的标准。
【讨论】:
Java allows you full screen mode, that has nothing to do with Lion.(通过chubbard)
如果你想用 Java 编写原生 Cocoa 应用程序,你需要使用JavaBridge。但是,JavaBridge 已被弃用。
我的建议是:如果您想编写原生 OSX Cocoa 应用程序,请使用 Objective C 或 Macruby。 MacRuby 目前正在接受 Apple 的资助(Sansonetti 是 Apple 的一名全职员工),并且可能与 Cocoa 有未来。 Java 没有。
【讨论】: