我想在 Java Swing 菜单栏中添加快捷键。以下是我尝试过的。
jMenuItem1.setText("Create");
jMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK));
这里我想要三个KeyEvent.VK_C, KeyEvent.CTRL_MASK
, 和KeyEvent.SHIFT_MASK
。
jMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK+ALT_MASK)
jMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,java.awt.Event.CTRL_MASK | java.awt.Event.SHIFT_MASK));
KeyStroke.getKeyStroke(KeyEvent.VK_C, 21);
http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/KeyStroke.html#getKeyStroke(int , int)
阅读修饰符,您就会知道 21(或 2 和 1)的用途...
来自Java 菜单教程:
要指定加速键,您必须使用 KeyStroke 对象,该对象组合了一个键(由 KeyEvent 常量指定)和一个修饰键掩码(由 ActionEvent 常量指定)。
引用的“修饰键掩码”是通过按位操作从多个 ActionEvents 创建的,因此在setAccelerator()
方法中指定多个事件的按位 OR 执行相同的操作。
jMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
java.awt.Event.CTRL_MASK | java.awt.Event.SHIFT_MASK));
要启用此跨平台(即使用Command
Mac 上的按钮而不是Control
),只需将 替换为java.awt.Event.CTRL_MASK
:
@SuppressWarnings("deprecation")
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); // Java 9 or older
或者
Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx(); // Java 10 or newer
最终的 setAccelerator 看起来像
jMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx() |
java.awt.Event.SHIFT_MASK));
在 Mac 上,您还会注意到菜单中的 Accelerator 文本本身也显示 CMD 符号,而在 Windows 上仍会显示 CTRL(例如 CMD+S 与 CTRL+S)。