2

KeyListeners よりも KeyBindings を使用する方が良いと読みました。KeyBinding が特定のキーに対する特定の反応に役立つことがわかりました。しかし、キーボードの任意のキーのプレス/リリースも検出しようとしています: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 アクションをマップするには?

どうもありがとう、ダン

相互投稿: http://www.javaprogrammingforums.com/whats-wrong-my-code/26194-how-detect-any-key-press-keybindings.html#post103862

4

1 に答える 1

5

KeyBindingsが特定のキーに対する特定の反応にどのように役立つかがわかります。

はい、それはあなたがキーバインディングを使用するときです

しかし、私はキーボードの任意のキーのプレス/リリースも検出しようとしています:KeyBindingsでこれを行う方法はありますか?

いいえ、キーバインディングはこの目的には使用されません。

また、任意の修飾子の組み合わせでKeyBindingをキャッチする方法はありますか?

いいえ、バインディングは特定のKeyStroke用です。したがって、各組み合わせのバインディングを追加するメソッドを作成する必要があります。順序は重要ではないことに注意してください。つまり、Shift+AltはAlt+Shiftと同じです

ほとんどの場合、キーバインディングが推奨されるアプローチです。あなたの場合はそうではありません。

フォーカスのある特定のコンポーネントでKeyEventsをリッスンしている場合は、KeyListenerが適切な場合があります。

または、よりグローバルにKeyEventsをリッスンしたい場合は、正確な要件に応じて、GlobalEventListenersまたはGlobalEventDispatchingを確認できます。

于 2013-03-23T20:33:11.500 に答える