【问题标题】:Java - Detecting any key press with KeyBindings?Java - 使用 KeyBindings 检测任何按键?
【发布时间】:2013-03-23 19:12:54
【问题描述】:

我读到使用 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

【问题讨论】:

  • 此请求已解决。您是否删除了我在其他网站上的帖子?因为如果是这样的话,我什至不明白让我交叉引用它有什么意义......
  • 我没看到。但无论如何,如果你能回答我,我将不胜感激。

标签: java swing key keypress key-bindings


【解决方案1】:

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

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

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

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

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

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

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

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

或者,如果您想在全球范围内收听 KeyEvent,则可以根据您的具体要求查看 Global Event ListenersGlobal Event Dispatching

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-05
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 2014-10-31
    • 2012-08-18
    相关资源
    最近更新 更多