我读到使用KeyBindings比使用KeyListeners更好。我看到了KeyBindings如何对特定的键做出特定的反应。但是我也在尝试检测键盘上的ANY键的按下/释放:有没有办法用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...");
      });


有没有办法做到这一点?

另外,有没有办法使用ANY修饰符组合来捕获它们的KeyBinding?例如。是否具有Enter-action映射,而不管是否不包含修饰符,或者是否同时按住ctrl-alt等组合在一起?

非常感谢,


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

最佳答案

我看到了KeyBindings如何对特定的键做出特定的反应。


是的,那是您要使用按键绑定的时候


  但是我也在尝试检测键盘上的ANY键的按下/释放:有没有办法用KeyBindings做到这一点?


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


  另外,有没有办法使用ANY修饰符组合来捕获它们的KeyBinding?


不,绑定再次用于特定的KeyStroke。因此,您将需要编写一种方法来为每个组合添加绑定。注意顺序无关紧要。即Shift + Alt与Alt + Shift相同

在大多数情况下,键绑定是首选方法。在您的情况下不是。

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

或者,如果您想在更全局的基础上侦听KeyEvent,则可以根据实际需要查看Global Event ListenersGlobal Event Dispatching

08-06 12:14