2

我读到使用 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...");
      });

有没有办法做到这一点?

另外,有没有办法用 ANY 修饰符组合来捕捉它们的 KeyBinding?例如,无论是否持有任何修饰符,或者是否持有任何组合的 ctrl-alt 等,都映射 Enter-action?

非常感谢,丹

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

4

1 回答 1

5

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

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

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

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

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

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

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

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

或者,如果您想在更全局的基础上侦听 KeyEvent,那么您可以根据您的具体要求查看Global Event ListenersGlobal Event Dispatching 。

于 2013-03-23T20:33:11.500 回答