Mac OS X 10.9中的Java Swing GUI

时间:2014-03-31 15:32:47

标签: java macos swing user-interface

在实现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");在条形图中显示的名称是项目主题中给出的名称。
  3. 界面: GUI


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

1 个答案:

答案 0 :(得分:2)

example cited开始,

  1. JMenuItem监听器打印"此处"点击File > Item时。

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

  3. image

    经测试:

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