2011-04-16 13 views
5

Tengo una clase MainWindow que amplía JFrame. En MainWindow tengo una JMenuBar.Substance y MacOS MenuBar

Quiero mostrar la barra de menús en OSX en la parte superior (al lado del símbolo de Apple). Esto solo funciona, cuando no configuro una Sustancia Skin. ¿Es posible usar Substance Skin y usar The MacOS MenuBar?

Mi Código:

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

Respuesta

4

Sí, como se muestra a continuación.

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

ver también [esta serie de artículos] (http://java.sun.com/developer/technicalArticles/JavaLP/ JavaToMac3 /). – trashgod

+1

el enlace está roto, el artículo se puede encontrar ahora [aquí] (http://www.oracle.com/technetwork/articles/javase/javatomac3-137430.html) sin imágenes y aquí [aquí] (http: // 192.9.162.55/developer/technicalArticles/JavaLP/JavaToMac3) con imágenes – bobndrew

6

Puede especificar la interfaz de usuario para la barra de menú solo de esta manera:

   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

Esta respuesta funciona muy bien. –

Cuestiones relacionadas