当我将setAccelerator()设置为Control + A或Control + P并运行程序时,它不会检测到击键。
以下是代码:
menuItem = new JMenuItem("About");
menuItem.setActionCommand("About");
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, Event.CTRL_MASK));
menuItem.setMnemonic(KeyEvent.VK_A);
menuItem.addActionListener(this);
menu.add(menuItem);
然后当它被按下时,它应该调用Action Listener:
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("About")) {
System.out.println("About");
}
}
如果重要的话,我在Mac上运行它。
答案 0 :(得分:5)
Control-A和Control-P都是可能已被拦截的击键,具体取决于您的平台和键盘焦点。 Control-A可能已被拦截并解释为“全选”,Control-P可能已被拦截并解释为“粘贴”。
如果您选择不太常用的击键而不是“Control-A”,例如“Control-Shift-A”或“Control-B”,该怎么办?以下是使用Control-Shift-A而不是Control-A的代码的修改版本:
menuItem = new JMenuItem("About");
menuItem.setActionCommand("About");
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, Event.CTRL_MASK | Event.SHIFT_MASK));
menuItem.setMnemonic(KeyEvent.VK_A);
menuItem.addActionListener(this);
menu.add(menuItem);
我使用the JMenu demo from the Swing tutorial在我自己的系统上测试了这个更改,我发现(正如你所做的)注册Control-A,因为加速器没有效果。但是,将Control-Shift-A注册为加速器非常有效。
答案 1 :(得分:-1)
不确定它是否会有所帮助,但您使用Event.CTRL_MASK
代替KeyEvent.CTRL_MASK