我读到使用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 Listeners或Global Event Dispatching。