2011-04-16 22 views
5

JFrame'i genişleten bir Class MainWindow'um var. MainWindow'da bir JMenuBar'ım var.Madde ve MacOS MenuBar

I (sonraki Elma Sembol) üstünde OSX içinde bir menü çubuğu görünür istiyorum. Bu sadece bir Substance Skin koymadığımda işe yarıyor. Bir Madde Cildi kullanmak ve MacOS MenuBar'ı kullanmak mümkün mü?

Benim Kod:

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

cevap

4

Evet, aşağıda gösterildiği gibi.

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

Ayrıca bakınız [makalelerin bu diziyi] (http://java.sun.com/developer/technicalArticles/JavaLP/ JavaToMac3 /). – trashgod

+1

link bozuk, makale artık burada [http://www.oracle.com/technetwork/articles/javase/javatomac3-137430.html) ve burada [burada] (http: //) bulunabilir 192.9.162.55/developer/technicalArticles/JavaLP/JavaToMac3) görüntülü – bobndrew

6

Böyle yalnız menü çubuğu için UI belirtebilirsiniz:

   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

Bu cevap çok iyi çalışıyor. –