【问题标题】:Java Swing GUI in Mac OS X 10.9Mac OS X 10.9 中的 Java Swing GUI
【发布时间】:2014-03-31 15:32:47
【问题描述】:

在实现 Mac OS X 的外观和感觉之后,就在阅读之后

我注意到两个问题。

  1. 虽然JMenuBar 现在显示在 Mac 栏中,但如果我单击 JMenuItem,则不会调用任何事件。使用:System.setProperty("apple.laf.useScreenMenuBar", "true");
  2. 使用System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Name"); 显示在栏中的名称是项目的 cration 中给出的名称。

界面:


我正在尝试Java OS X Lion Set application name doesn't work 来解决第二个问题。我无法从命令行启动 jar,所以我正在使用 Martjin 答案。

【问题讨论】:

    标签: java macos swing user-interface


    【解决方案1】:

    example cited开始,

    1. File > Item 被点击时,JMenuItem 监听器会打印“Here”。

    2. about.name 属性是About 对话框中的名称,如下所示,但该属性当前被忽略。

    经测试:

    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    
    /**
     * @see https://stackoverflow.com/a/22766921/230513
     * @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");
                    JMenuItem item = new JMenuItem("Item");
                    fileMenu.add(item);
                    item.addActionListener(new ActionListener() {
    
                        @Override
                        public void actionPerformed(ActionEvent e) {
                            System.out.println("Here");
                        }
                    });
                    menuBar.add(fileMenu);
                    frame.setJMenuBar(menuBar);
                    frame.setVisible(true);
                }
            });
        }
    }
    

    【讨论】:

    • 我已经复制了这段代码,因为它已经写好了,现在调用了事件,但名称没有改变。 +1 但尚未满。事实上,正如您在回答中看到的那样,显示的标题是 NewMain 而不是 Name。
    • 对;要获得您想要的名称,您必须创建一个应用程序包并在 Info.plist 中指定名称。
    • 在哪里可以找到 Info.plist?,我看到 Xcode 中的位置,但我使用的是 NetBeans。
    • Info.plist 进入您的应用程序包;详情请见Java Deployment Options for OS X
    猜你喜欢
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2010-09-11
    • 2013-11-01
    • 1970-01-01
    • 2011-06-04
    相关资源
    最近更新 更多