如何在Java Swing菜单栏中添加三个Shoutcut键(Ctrl + Shift + C)?

时间:2012-02-22 03:55:25

标签: java swing menuitem keyevent jmenuitem

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

jMenuItem1.setText("Create");

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

我想要三个KeyEvent.VK_C, KeyEvent.CTRL_MASKKeyEvent.SHIFT_MASK

4 个答案:

答案 0 :(得分:6)

jMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK+ALT_MASK)

答案 1 :(得分: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)的用途......

答案 2 :(得分:3)

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

答案 3 :(得分:0)

来自Java Menu Tutorial

<块引用>

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

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

仅在 Windows 上:

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

跨平台:

要启用此跨平台(即在 Mac 上使用 Command 按钮而不是 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 上,您还会注意到菜单中的加速器文本本身也会显示 CMD 符号,而在 Windows 上,它仍会显示 CTRL(例如 CMD+S 与 CTRL+S)。