2012-01-21 17 views
5

JMenuBar cihazımı Mac OS X'teki ekran menü çubuğuna taşıdığımda, menünün penceremde olması için boş bir alan bırakıyor; O alanı kaldırmam gerek. Ben benim JMenuBar ekran menü çubuğuna taşımak içinJMenuBar'ımı Mac OS X'teki ekran menü çubuğuna nasıl taşıyabilirim?

System.setProperty("apple.laf.useScreenMenuBar", "true") 

kullanıyorum. Bir Mac kullanan arkadaşım, bu özelliği ayarlamadıysam, menünün yerleşeceği çirkin dikey boşluk bıraktığını bildiriyor. Bu sorunu çözmenin en iyi yolu nedir?

DÜZENLEME:

public static void main(String[] args) { 
    System.setProperty("apple.laf.useScreenMenuBar", "true"); 
    System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Name"); 

    JFrame frame = new JFrame("Gabby"); 
    final DesktopMain dm = new DesktopMain(); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(dm); 
    frame.setSize(160, 144); 
    frame.setLocationRelativeTo(null); 
    frame.setIgnoreRepaint(true); 

    JMenuBar menuBar = new JMenuBar(); 
    JMenu fileMenu = new JMenu("File"); 
    menuBar.add(fileMenu); 

    // Populating the menu bar code goes here 

    frame.setJMenuBar(menuBar); 
    frame.setVisible(true); 
} 
+1

sen gönderir misiniz kodu? Normalde, düzen tüm odayı kullanacak şekilde otomatik olarak ayarlanır. – Eelke

cevap

11

program başlattı etkili olduğu çok geç olabilir sonra özelliğini ayarlayarak, bitince bağlı: İşte benim kaynaktan bir örnektir. Bunun yerine, ayarı başlatma zamanında ekleyin. Java Deployment Options for Mac OS X, Java Dictionary Info.plist Keys, About Info.plist Keys ve Java Runtime System Properties tartışıldığı üzere

java -Dapple.laf.useScreenMenuBar=true -jar MyApplication.jar 

Alternatif, başvurunuz demeti en Info.plist yılında özelliğini ayarlayın.

<key>Properties</key> 
<dict> 
    <key>apple.laf.useScreenMenuBar</key> 
    <string>true</string> 
    ... 
</dict> 

Zeyilname: Aşağıda gösterildiği gibi, sorun değil @Urs Reupke ya başıma önerilen yaklaşım kullanarak görünür yapar. Sizin (eksik) DesktopMain hatalı olabilir.

Screen capture önerdiklerini trashgod, ne yaptığını yapmak için bir alternatif olarak

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JPanel; 

/** @see http://stackoverflow.com/questions/8955638 */ 
public class NewMain { 

    public static void main(String[] args) { 
     System.setProperty("apple.laf.useScreenMenuBar", "true"); 
     System.setProperty(
      "com.apple.mrj.application.apple.menu.about.name", "Name"); 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 

       JFrame frame = new JFrame("Gabby"); 
       final JPanel dm = new JPanel() { 

        @Override 
        public Dimension getPreferredSize() { 
         return new Dimension(320, 240); 
        } 
       }; 
       dm.setBorder(BorderFactory.createLineBorder(Color.blue, 10)); 

       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(dm); 
       frame.pack(); 
       frame.setLocationByPlatform(true); 

       JMenuBar menuBar = new JMenuBar(); 
       JMenu fileMenu = new JMenu("File"); 
       menuBar.add(fileMenu); 
       frame.setJMenuBar(menuBar); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
+0

trashgod, bu doğru görünmüyor - Kodumda yapıyorum ve henüz bir şikayette bulunmadım. –

+0

@UrsReupke: İyi nokta; düzenlendi. Etkisini yeniden üretemiyorum, ancak [bu] gibi raporlar gördüm (http://stackoverflow.com/a/1654547/230513). Ekstra mil için – trashgod

+0

+1. –

3

- ama UI başlatmak önce, çok erken bunu.

Ayrıca, barda uygulamanın adını görüntülemek için bu kullanmayı düşünebilirsiniz: Java 8 kullanım için

System.setProperty("com.apple.mrj.application.apple.menu.about.name", "MyApplication"); 
+0

+1 tnecniv: Lütfen açıkladığınız sorunu gösteren bir [sscce] (http://sscce.org/) sağlayın. – trashgod

+0

@trashgod Kaynak örneğimi ekledim – tnecniv

+0

@tnecniv: [burada] detaylandırdım (http://stackoverflow.com/a/8956715/230513). – trashgod

0

bu

System.setProperty("apple.awt.application.name", "My app");