Java:如何检查JFrame的菜单栏是否显示在系统菜单栏或框架本身中?

蒂姆·艾姆(Tim Aim)

一个JFrame在(从Swing)允许您设置菜单栏(实例中MenuBar使用JFrame.setMenuBar(mb);)。该菜单栏可能会显示在不同的位置,具体取决于它所运行的系统。如果运行该应用程序的操作系统在屏幕顶部具有一个菜单栏,则JFrame通常在此菜单栏中显示此菜单栏。如果不支持此功能,则菜单栏将显示在框架本身的顶部。

您可以在下面的示例中看到不同系统上的不同行为:

Windows上的菜单栏 Mac OS X上的MenuBar

这是我用来设置菜单栏的代码示例:

// Initialize a menu bar
MenuBar mb = new MenuBar();

// Initialize the menu and some menu items, add these to the menu bar
Menu m = new Menu("Menu 1");
MenuItem mi1 = new MenuItem("Menu Item 1");
MenuItem mi2 = new MenuItem("Menu Item 2");
MenuItem mi3 = new MenuItem("Menu Item 3");
m.add(mi1);
m.add(mi2);
m.addSeparator();
m.add(mi3);
mb.add(m);

// Set the menu bar
setMenuBar(mb);

我的问题是:如何检查菜单栏将显示在框架本身还是系统的菜单栏中(如果支持)?如果有任何可能的方法无需初始化和定义菜单栏就可以进行检查,那就太好了。也许这是不可能的,如果是这样的话,是否可以在定义菜单栏后检查同样的问题?

垃圾神

如图所示这里apple.laf.useScreenMenuBar指定一个Mac OS功能,可显示现有的JMenuBar画面,其中一个Mac用户希望看到它上面。尽管它与您的应用程序无关,但是只有当您将菜单栏显示在菜单栏上时,菜单栏才在那里显示。合适的跨平台谓词可能如下所示:

if (System.getProperty("os.name").startsWith("Mac OS X")) {
    System.setProperty("apple.laf.useScreenMenuBar", "true");
    System.setProperty("apple.awt.graphics.UseQuartz", "true");
    // etc.
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章