微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 如何将我的JMenuBar移动到Mac OS X上的屏幕菜单栏?

当我将JMenuBar移动到Mac OS X上的屏幕菜单栏时,它会留下一些空白区域,菜单将出现在我的窗口中;我需要删除那个空间.我在用
System.setProperty("apple.laf.useScreenMenuBar","true")

将我的JMenuBar移动到屏幕菜单栏.我的朋友使用Mac报告,如果我没有设置该属性,这将留下一些丑陋的垂直空间,菜单将驻留在该空间中.解决此问题的最佳方法是什么?

编辑:这是我的来源的一个例子:

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

解决方法

根据完成的时间,在程序启动后设置属性可能为时已晚,无法生效.而是在启动时添加设置.
java -Dapple.laf.useScreenMenuBar=true -jar MyApplication.jar

或者,在应用程序包的Info.plist中设置该属性,如Java Deployment Options for Mac OS X,Java Dictionary Info.plist Keys,About Info.plist KeysJava Runtime System Properties中所述.

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

附录:如下所示,使用@Urs Reupke或我建议的方法不会出现问题.你的(缺失的)DesktopMain可能有问题.

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

原文地址:https://www.jb51.cc/java/126271.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐