2011-04-16 20 views
5

我有一个扩展JFrame的类MainWindow。在MainWindow中我有一个JMenuBar。Substance和MacOS MenuBar

我想在OSX上显示MenuBar(Apple Symbol旁)。这只适用于,当我不设置物质皮肤。是否可以使用Substance Skin并使用MacOS MenuBar?

我的代码:

//Set Menu for MacOS 
System.setProperty("apple.laf.useScreenMenuBar", "true"); 
System.setProperty("com.apple.mrj.application.apple.menu.about.name", name); 

try { 
    SwingUtilities.invokeAndWait(new Runnable() { 
     public void run() { 
      SubstanceSkin skin = new GraphiteGlassSkin(); 
      SubstanceLookAndFeel.setSkin(skin); //WORKS WHEN I COMMENT THIS (WITHOUT SUBSTANCE SKIN) 
      JFrame.setDefaultLookAndFeelDecorated(false); 
      MainWindow mainWindow = new MainWindow(name); 
      mainWindow.setVisible(true); 
     } 
    }); 
} catch (InterruptedException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (InvocationTargetException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

回答

4

是的,如下图所示。

 
$ java -Xdock:name=MyApp -Dswing.defaultlaf=com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel -jar MyApp.jar 
+1

参见[这个系列的文章(http://java.sun.com/developer/technicalArticles/JavaLP/ JavaToMac3 /)。 – trashgod 2011-04-16 18:35:33

+1

链接被破坏,文章现在可以在[here](http://www.oracle.com/technetwork/articles/javase/javatomac3-137430.html)找到,没有图像,这里[here](http:// 192.9.162.55/developer/technicalArticles/JavaLP/JavaToMac3)与图像 – bobndrew 2013-02-13 10:24:15

6

您可以单独指定菜单栏中的UI是这样的:

   try { 
        UIManager.setLookAndFeel(new SubstanceBusinessBlackSteelLookAndFeel()); 
       } catch (UnsupportedLookAndFeelException ex) { 
        // log... 
       } 

       JMenuBar menubar = frame.getJMenuBar(); // assuming you've set the menu bar already 
       String os = System.getProperty("os.name"); 

       if (os.equals("Mac OS X")) { 
        try { 
         System.setProperty("apple.laf.useScreenMenuBar", "true"); 
         menubar.setUI((MenuBarUI) Class.forName("com.apple.laf.AquaMenuBarUI").newInstance()); 
        } catch (Exception ex) { 
         // log... 
        } 
       } 
+1

这个答案很好。 – 2012-05-11 20:22:02