2012-01-21 7 views
5

जब मै मैक ओएस एक्स पर स्क्रीन मेनू बार में अपना JMenuBar स्थानांतरित करता हूं, तो यह कुछ रिक्त स्थान छोड़ देता है जहां मेनू मेरी खिड़की में होगा; मुझे उस जगह को हटाने की जरूरत है। मैंमैक ओएस एक्स पर स्क्रीन मेनू बार में अपने जेमेनूबार को कैसे स्थानांतरित करूं?

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

स्क्रीन मेनू बार में JMenuBar स्थानांतरित करने के लिए उपयोग कर रहा हूं। मेरे दोस्त जो मैक का उपयोग करता है रिपोर्ट करता है कि यह कुछ बदसूरत लंबवत स्थान छोड़ देता है जहां मेनू उस निवास को सेट नहीं करता है, तो मेनू रहता है। इस मुद्दे को हल करने का सबसे अच्छा तरीका क्या है?

संपादित करें:

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

आप पोस्ट कर सके कोड? आम तौर पर लेआउट सभी कमरे का उपयोग करने के लिए स्वचालित रूप से समायोजित करता है। – Eelke

उत्तर

11

इसके पूर्ण हो जाने के आधार पर, के बाद संपत्ति की स्थापना अपने कार्यक्रम की शुरूआत भी प्रभावी होने के लिए देर हो सकती है: यहाँ मेरी स्रोत से एक उदाहरण है। इसके बजाय, लॉन्च समय पर सेटिंग जोड़ें।

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

वैकल्पिक रूप से, के रूप में Java Deployment Options for Mac OS X, Java Dictionary Info.plist Keys, About Info.plist Keys और Java Runtime System Properties में चर्चा की, आपके आवेदन बंडल के Info.plist में गुण सेट।

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

परिशिष्ट: के रूप में नीचे दिखाया गया है, समस्या नहीं दृष्टिकोण @Urs Reupke या अपने आप के द्वारा सुझाए गए का उपयोग कर दिखाई है। आपका (गायब) DesktopMain गलती हो सकता है।

Screen capture

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

ट्रैशगोड, जो सही नहीं लगता है - मैं इसे अपने कोड में कर रहा हूं, और मुझे अभी तक शिकायत नहीं सुना है। –

+0

@UrsReupke: अच्छा बिंदु; संपादित। मैं प्रभाव को पुन: पेश नहीं कर सकता, लेकिन मैंने [इस] (http://stackoverflow.com/a/1654547/230513) जैसी रिपोर्टें देखी हैं। अतिरिक्त मील के लिए – trashgod

+0

+1। –

3

एक वैकल्पिक करने के लिए क्या trashgod पता चलता है, आप क्या कर रहे करते हैं - लेकिन यह बहुत जल्दी करते हैं, इससे पहले कि आप अपने यूआई आरंभ कर देगा।

इसके अलावा, आप बार में अपने एप्लिकेशन का नाम प्रदर्शित करने के लिए यह प्रयोग करने पर विचार हो सकता है:

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

+1 tnecniv: कृपया एक [एसएससीई] (http://sscce.org/) प्रदान करें जो आपके द्वारा वर्णित समस्या का प्रदर्शन करता है। – trashgod

+0

@trashgod मैंने अपना स्रोत उदाहरण – tnecniv

+0

@tnecniv जोड़ा: मैंने [यहां] विस्तृत किया है (http://stackoverflow.com/a/8956715/230513)। – trashgod

0

जावा 8 उपयोग के लिए इस

System.setProperty("apple.awt.application.name", "My app"); 
संबंधित मुद्दे