如何给swing加上alt+x和ctrl+x快捷键

1.给菜单栏上的菜单alt+x快捷键非常简单:

private JMenu helpInfo = new JMenu("帮助");

helpInfo.setMnemonic(KeyEvent.VK_?);

public void setMnemonic(int mnemonic)

设置当前模型上的键盘助记符。助记符是某种键,它与外观的无鼠标修饰符(通常是 Alt)组合时(如果焦点被包含在此按钮祖先窗口中的某个地方)将激活此按钮。 
一个助记符必须对应键盘上的一个键,并且应该使用 java.awt.event.KeyEvent 中定义的 VK_XXX 键代码之一指定。助记符是不区分大小写的,所以具有相应键代码的键事件将造成按钮被激活,不管是否按下 Shift 修饰符。如果在按钮的标签字符串中发现由助记符定义的字符,则第一个出现的助记符将是带下划线的,以向用户指示该助记符。

2.给菜单的下拉菜单加上ctrl+x就有些复杂:

final JMenuItem bargeInfo = new JMenuItem("驳船信息管理(N)         ");
  
//设置快捷键
KeyStroke keyStroke1 = KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK);

bargeInfo.setAccelerator(keyStroke1);   

   bargeInfo.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
                 //添加事件监听代码
    }
   });

public void setAccelerator(KeyStroke keyStroke)

设置组合键,它能直接调用菜单项的操作侦听器而不必显示菜单的层次结构。UI 负责安装正确的操作。注意,当键入键盘加速器时,不管目前是否显示菜单,它都会运行。 
参数:
keyStroke - 将作为加速器的 KeyStroke

public class KeyStroke extends AWTKeyStroke
表示键盘或等效输入设置上的键操作的KeyStroke。KeyStroke 仅能对应于按下或释放某个特定的键,正如 KEY_PRESSED 和 KEY_RELEASED KeyEvents 执行的操

作;或者,它们可能对应于键入特定的 Java 字符,正如 KEY_TYPED KeyEvents 执行的操作。在所有情况下,KeyStroke 都可以指定修饰符(alt、shift、

control、meta 或其组合),在针对精确匹配的操作中,这些修饰符必须存在.KeyStroke 是不可变的,而且是惟一的。客户端代码无法创建 KeyStroke;必须使

用 getKeyStroke 的变体。

public static KeyStroke getKeyStroke(int keyCode, int modifiers)
在给出一个数字键代码和一组修饰符的情况下,返回 KeyStroke 的一个共享实例。返回的 KeyStroke 将对应于一个按键操作。

可以使用在 java.awt.event.KeyEvent 中定义的“虚拟键”常量来指定键代码。例如:
java.awt.event.KeyEvent.VK_ENTER 
java.awt.event.KeyEvent.VK_TAB 
java.awt.event.KeyEvent.VK_SPACE 
修饰符由以下任意组合组成:
java.awt.event.InputEvent.SHIFT_MASK (1) 
java.awt.event.InputEvent.CTRL_MASK (2) 
java.awt.event.InputEvent.META_MASK (4) 
java.awt.event.InputEvent.ALT_MASK (8) 
因为这些数字都是 2 的不同次幂,所以它们的任意组合是一个整数,该整数的每个位都表示一个不同的修饰符键。可以使用 0 指定无修饰符。

参数:
keyCode - 一个 int,指定键盘上某个键的数字代码
modifiers - 任意修饰符的按位或组合

返回:
该键的 KeyStroke 对象

原文地址:https://www.cnblogs.com/hehaiyang/p/3733551.html