编程语言
首页 > 编程语言> > Java:如何检查JFrame的菜单栏是显示在系统菜单栏还是框架本身?

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

作者:互联网

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

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

 

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

// 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);

我的问题是:如何检查菜单栏是否会显示在框架本身或系统的菜单栏中(如果支持)?如果有任何可能的方法来检查这一点而没有初始化和定义菜单栏,那将是很好的.
也许这是不可能的,如果是这样的话,是否可以在定义菜单栏后检查同样的问题?

解决方法:

here所示,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.
}

标签:java,swing,menu,menubar
来源: https://codeday.me/bug/20190612/1227107.html