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