1

我想在 Java Swing 菜单栏中添加快捷键。以下是我尝试过的。

jMenuItem1.setText("Create");
jMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK));

这里我想要三个KeyEvent.VK_C, KeyEvent.CTRL_MASK, 和KeyEvent.SHIFT_MASK

4

4 回答 4

6
jMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK+ALT_MASK)
于 2012-02-22T04:07:57.143 回答
4
jMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,java.awt.Event.CTRL_MASK | java.awt.Event.SHIFT_MASK));
于 2017-07-18T10:59:12.853 回答
3

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)的用途...

于 2012-02-22T04:12:21.620 回答
0

来自Java 菜单教程

要指定加速键,您必须使用 KeyStroke 对象,该对象组合了一个键(由 KeyEvent 常量指定)和一个修饰键掩码(由 ActionEvent 常量指定)。

引用的“修饰键掩码”是通过按位操作从多个 ActionEvents 创建的,因此在setAccelerator()方法中指定多个事件的按位 OR 执行相同的操作。

仅在 Windows 上:

jMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
                         java.awt.Event.CTRL_MASK | java.awt.Event.SHIFT_MASK));

跨平台:

要启用此跨平台(即使用CommandMac 上的按钮而不是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)。

于 2021-06-09T19:41:54.447 回答