Java - 使用KeyBindings检测任何按键?

时间:2013-03-23 19:12:54

标签: java swing key keypress key-bindings

我读到使用KeyBindings比使用KeyListeners更好。我看到KeyBindings如何对特定键的特定反应有用;但我也试图检测键盘上任意键的按下/释放:有没有办法用KeyBindings做到这一点?

例如,我会正常使用KeyBindings来处理单个键,如下所示:

InputMap iMap = component.getInputMap();
ActionMap aMap = component.getActionMap();

iMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "enter without modifiers");
aMap.put("enter without modifiers", new AbstractAction(){
      public void actionPerformed(ActionEvent a){
              System.out.println("Enter pressed alone");
      });

因此,我正在考虑使用这样的方法来检测任何按键:

iMap.put(KeyStroke.getKeyStroke(KeyEvent.KEY_PRESSED, 0), "any key was pressed");
aMap.put("any key was pressed", new AbstractAction(){
      public void actionPerformed(ActionEvent a){
              System.out.println("some key was pressed, regardless of which key...");
      });

有没有办法实现这个目标?

另外,有没有办法用任何修饰符组合捕获它们的KeyBinding?例如。无论是否保留修饰符,或者如果同时保持任何组合的ctrl-alt等,都可以映射Enter-action?

非常感谢, 丹

交叉发布于:http://www.javaprogrammingforums.com/whats-wrong-my-code/26194-how-detect-any-key-press-keybindings.html#post103862

1 个答案:

答案 0 :(得分:5)

  

我看到KeyBindings如何对特定键的特定反应有用;

是的,那就是你要使用键绑定

  

但我也试图检测键盘上任意键的按下/释放:有没有办法用KeyBindings做这个?

不,键绑定不用于此目的。

  

另外,有没有办法用任何修饰符组合来捕捉它们的KeyBinding?

不,再次绑定是针对特定的KeyStroke。因此,您需要编写一个方法来为每个组合添加绑定。请注意,顺序无关紧要。这是Shift + Alt与Alt + Shift

相同

在大多数情况下,Key Bindings是首选方法。在你的情况下,它不是。

如果您正在侦听具有焦点的特定组件上的KeyEvent,则KeyListener可能是合适的。

或者您希望在全球范围内倾听KeyEvents,然后根据您的具体要求,您可以查看Global Event ListenersGlobal Event Dispatching