在OSX Lion上为Java应用程序提供全屏功能

20

我如何在Java应用程序中(natively)实现OSX Lion的全屏功能?

当前给出的答案包含了一种实现类似于全屏的方法。我已经阅读过Eclipse可以使用Lion的"native"全屏功能。这就是我所问的。

6个回答

29

我在苹果的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上无效。

更明确地说,在你的 JFrame 构造函数中尝试早期调用此方法...

/**
 * @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);
    }
}

有没有办法检查应用程序当前是否处于全屏模式?否则,切换全屏模式就毫无意义。 - mostruash
1
@mostruash:是的,您可以将监听器附加到窗口上,以查看它是否进入或退出全屏模式。请参见com.apple.eawt.FullScreenUtilities中的静态方法com.apple.eawt.FullScreenListener的定义 - Arthur Edelstein

6

这个FS实际上更像是“专属游戏FS”,您可以选择分辨率、刷新率等。 - Eduardo Costa

3

如果您不介意使用快速而简单的解决方案:

在Frame构造函数中调用getRootPane().putClientProperty("apple.awt.fullscreenable", Boolean.valueOf(true))。这就是setWindocCanFullScreen所做的。


1
你所尝试做的可以通过 com.apple.eawt 库来完成。另外,为了避免通过反射编写代码,如果你还在其他操作系统上部署应用程序,如 Windows、Linux 等,则应该使用并嵌入在应用程序中分发 AppleJavaExtensions.jar 来实现。

这是使框架全屏可扩展的方法:

FullScreenUtilities.setWindowCanFullScreen(window,true);

这是切换全屏的方法:

Application.getApplication().requestToggleFullScreen(window);

其中参数window是您正在尝试使其全屏的应用程序的JFrame。

要查看示例应用程序,请查看RationalPlan Project


你看到了吗,被接受的解决方案相当老旧,而且由于反射更加强大? - gamma
我的答案是为像我这样不想麻烦反射的其他用户提供的略微补充的解决方案。 - Tiberiu

0
请向苹果公司提交错误报告。他们负责在OS X上维护Java,因此它应符合他们发布的标准。

1
不支持Java 6及以前版本。[https://www.apple.com/pr/library/2010/11/12Oracle-and-Apple-Announce-OpenJDK-Project-for-Mac-OS-X.html] - no.good.at.coding

-2

Java允许您使用全屏模式,这与Lion无关。(通过{{link2:chubbard}})

如果您想使用Java编写本地Cocoa应用程序,则需要使用{{link3:JavaBridge}}。但是,JavaBridge已被弃用。

我的建议是:如果您想编写本地OSX Cocoa应用程序,请使用Objective C或{{link4:Macruby}}。 MacRuby目前正在接受来自Apple的资金支持(Sansonetti是全职Apple员工),并且可能会成为Cocoa的未来。Java不行。


你的链接与上面的链接相同。你的本地推荐很有道理,但我们已经拥有了一个完整成熟的Java产品实现。苹果通常为Java提供特殊的OSX API - 我希望Oracle已经为Lion版本准备了类似的东西。 - gamma
我知道链接是相同的,我试图给出一个完整的答案。我归功于chubbard。苹果确实提供了这个,它被称为JavaBridge。链接在上面。 - nes1983
我可以添加像NetBeans这样的跨平台应用程序。在Mac上运行时,菜单已集成到OSX菜单中(即窗口内没有“菜单栏”)。它们有一个“全屏”功能,但不像Lion的全屏。我很想创建一个补丁并提交给NB团队。 - Eduardo Costa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接