Mac上的Java:来自屏幕菜单栏的键盘命令未执行

时间:2016-07-02 22:43:32

标签: java macos swing

在Mac上使用Java 8和Swing,我在JFrame中有一个JMenuBar,它使用系统属性apple.laf.useScreenMenuBar作为屏幕菜单栏放置。

当我在这个JFrame中打开一个子对话框时,我应该能够通过他们的快捷方式访问我的菜单命令。点击我的快捷方式(Command + Z)菜单栏闪烁,但命令没有执行。有什么建议?

这是一个运行问题的代码段。在主JFrame中按Command + Z可以运行并执行操作。在子窗口内按Command + Z不起作用。

public class TestClass {

    static class MyFrame extends JFrame {

        public MyFrame() throws HeadlessException {
            JMenuBar menuBar = new JMenuBar();
            JMenu menu = new JMenu("menu");
            JMenuItem menuItem = new JMenuItem(new AbstractAction("action") {
                {
                    putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
                }

                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println("action executed!");
                }
            });
            menu.add(menuItem);
            menuBar.add(menu);
            setJMenuBar(menuBar);
            JButton button = new JButton("open dialog");
            add(button);
            button.addActionListener((e) -> {
                JDialog dlg = new JDialog(MyFrame.this);
                dlg.setSize(300, 300);
                dlg.setVisible(true);
            });
        }

    }

    public static void main(String[] args) {
        System.setProperty("apple.laf.useScreenMenuBar", "true");
        MyFrame f = new MyFrame();
        f.setSize(400, 400);
        f.setVisible(true);
    }


}

0 个答案:

没有答案