Java MacOSX中顶部的JMenuBar

Java MacOSX中顶部的JMenuBar,java,macos,jmenubar,Java,Macos,Jmenubar,在Netbeans使用的Java桌面应用程序模板中,使用JMenuBar和JMenuItems创建菜单栏 我怎样才能使菜单栏显示在顶部,即菜单栏显示在MacOSX中而不是Windows中的窗口中?通过在代码中添加类似的内容: if (System.getProperty("os.name").contains("Mac")) { System.setProperty("apple.laf.useScreenMenuBar", "true"); } 注意:这是过时的信息-需要更新的答案。 即

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


我怎样才能使菜单栏显示在顶部,即菜单栏显示在MacOSX中而不是Windows中的窗口中?

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

if (System.getProperty("os.name").contains("Mac")) {
  System.setProperty("apple.laf.useScreenMenuBar", "true");
}
注意:这是过时的信息-需要更新的答案。 即使在OSX下,Java应用程序看起来也像传统的Java应用程序

如果你想要一个本地的外观和感觉,有一些调整你必须做。本系列文章介绍了它们

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


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

我也有同样的问题,但我意识到菜单栏需要添加到框架中,如下所示:

frame.setJMenuBar(菜单栏)


而不是:frame.add(jMenuBar);以及:System.setProperty(“apple.laf.useScreenMenuBar”、“true”);在主要方法中

如果我使用以下参数运行我的应用程序:-Dapple.laf.useScreenMenuBar=true,则该条正确显示在顶部,但如果我使用System.setProperty(“apple.laf.useScreenMenuBar”,“true”);在主要方法上,它没有。有什么想法吗?我不确定。我会尝试将其作为main()方法或System.setProperty(“apple.laf.useScreenMenuBar”、“true”)中的第一个代码;如果没有if条件(例如,如果os.name包含“mac”而不是“mac”,则不满足),它似乎可以在我的10.5.8 Leopard上工作。我发现,如果我在创建JFrame之后(主要是第一件事)和创建JMenuBar或对JFrame进行任何其他修改之前放置它,它就可以工作。这是在OSX10.8.2(MountainLion)下进行的,“是Mac”的测试有点脆弱。更好的方法是测试所需功能的存在性——在本例中,测试是否存在特定于Apple Java 6的类。该测试听起来也很脆弱。你应该做的是测试Aqua外观和感觉是否在实际使用中。如果您在使用Nimbus时设置此系统属性,您的应用程序将崩溃,因此只有在使用Aqua时才设置此属性才是重要的。因为我写了答案,苹果已经否认了Java,而Oracle提供的Java 7的工作方式不同。我没有在OS X下使用Java 7。我已将旧的sun.com链接更新为oracle网站的新链接,但文章图像丢失,它们是2003年的……从2019年的莫哈韦开始,这个答案对我来说是必要的