【问题标题】:JMenuBar at the top in MacOSXMacOSX 顶部的 JMenuBar
【发布时间】:2009-10-31 14:26:41
【问题描述】:

在 Netbeans 使用的 Java 桌面应用程序模板中,使用 JMenuBar 和 JMenuItems 创建了一个菜单栏。

如何使该栏显示在顶部,其中菜单栏显示在 MacOSX 中而不是在窗口中,就像在 Windows 中一样?

【问题讨论】:

    标签: java macos jmenubar


    【解决方案1】:

    通过在代码中添加类似这样的内容:

    if (System.getProperty("os.name").contains("Mac")) {
      System.setProperty("apple.laf.useScreenMenuBar", "true");
    }
    

    【讨论】:

    • 如果我使用以下参数运行我的应用程序:-Dapple.laf.useScreenMenuBar=true,栏会正确显示在顶部,但如果我这样做 System.setProperty("apple.laf.useScreenMenuBar “, “真的”);在主要方法上,它没有。有什么想法吗?
    • 我不确定。我会尝试将其作为 main() 方法或 System.setProperty("apple.laf.useScreenMenuBar", "true"); 中的第一个代码。没有 if 条件(例如,如果 os.name 包含“mac”而不是“Mac”,则不满足)它似乎适用于我的 10.5.8 Leopard。
    • 我发现如果我在创建我的 JFrame 之后(在 main 中的第一件事)并且在创建我的 JMenuBar 或对我的 JFrame 进行任何其他修改之前放置它,它会起作用。这是在 OS X 10.8.2 (Mountain Lion) 下。
    • “是 Mac”的测试有点脆弱。更好的方法是测试您需要的功能是否存在——在这种情况下,是否存在特定于 Apple Java 6 的类。
    • 那个测试听起来也很脆弱。您应该做的是测试 Aqua 的外观和感觉是否实际在使用中。如果在使用 Nimbus 时设置此系统属性,您的应用程序将崩溃,因此仅在使用 Aqua 时设置它很重要。
    【解决方案2】:

    我遇到了同样的问题,但我意识到需要将 MenuBar 添加到框架中:

    frame.setJMenuBar(menuBar);

    而不是: frame.add(jMenuBar); 以及:System.setProperty("apple.laf.useScreenMenuBar", "true"); 在 main 方法中。

    【讨论】:

    • 从 2019 年的 Mojave 开始,这个答案对我来说是必要的
    【解决方案3】:

    注意:这是过时的信息 - 需要更新的答案。

    即使在 OS X 下,Java 应用程序看起来也像传统的 Java 应用程序。

    如果您想要原生的外观和感觉,则需要进行一些调整。本系列文章对它们进行了描述。

    http://www.oracle.com/technetwork/articles/javase/javatomac-140486.html http://www.oracle.com/technetwork/java/javatomac2-138389.html

    这包括设置 Dock 图标和文本,以及与应用程序菜单集成。

    我相信带有 XCode 的 OS X“将 jar 包装为应用程序”实用程序会自动设置所有这些属性。

    【讨论】:

    • 自从我写下答案后,Apple 就否认了 Java,Oracle 提供的 Java 7 的工作方式也有所不同。我没有在 OS X 下使用过 Java 7。
    • 我已经更新了旧的 sun.com 链接到 Oracle 网站的新链接,但是文章图片丢失了,它们来自 2003 年...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多