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

Dan*_*ich 2 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");
      });
Run Code Online (Sandbox Code Playgroud)

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

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...");
      });
Run Code Online (Sandbox Code Playgroud)

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

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

非常感谢,Dan

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

cam*_*ckr 5

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

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

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

不,密钥绑定不用于此目的.

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

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

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

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

或者,您希望在更全局的基础上监听KeyEvents,然后根据您的具体要求,您可以查看全局事件监听器全局事件调度.