在Mac OS X 10.9中的Java Swing GUI

3
在实现Mac OS X的外观后,阅读以下内容:

我注意到两个问题。

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

界面: GUI


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

1个回答

2

引用的示例开始,

  1. 当单击文件>项时,JMenuItem监听器会打印“Here”。

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

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://dev59.com/l37aa4cB1Zd3GeqPnTUf#22766921
 * @see https://dev59.com/5l_Va4cB1Zd3GeqPUYkC
 */
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。 - Mitro
正确的做法是创建一个应用程序包并在 Info.plist 中指定名称,这样你就可以得到想要的名称了。 - trashgod
我在哪里可以找到Info.plist文件?我知道在Xcode中可以找到,但是我使用的是NetBeans。 - Mitro
Info.plist 放在您的应用程序包中;有关详细信息,请参见 OS X 上的 Java 部署选项 - trashgod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接