1

キーをメソッドにバインドするために InputMap と ActionMap を構築しています。キーの多くは同様のことを行います。バインドされたキーごとに InputMap に 1 つのエントリがあります。複数の InputMap エントリを同じ ActionMap エントリに関連付け、AbstractAction.actionPerformed(ActionEvent event) メソッドで ActionEvent パラメータを使用して、どのキーが押された/離された/入力されたかを判断したいと考えています。私は getID() を見て、ActionEvent が KeyEvent であるかどうかをテストしました (そうではありません)。これを行う方法はありますか、またはそれぞれの固有の ActionMap エントリがパラメーターを設定してから (パラメーター化された) メソッドを呼び出すように、別の方法でリファクタリングする必要がありますか?

これが機能するものです(ただし詳細です):

    getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT,0),"myRightHandler");
    getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT,0),"myLeftHandler");
    getActionMap().put("myRightHandler",new AbstractAction() {
              public void actionPerformed(ActionEvent evt) {
                  System.out.println("Typed Right Arrow");
              }
          });
    getActionMap().put("myLefttHandler",new AbstractAction() {
              public void actionPerformed(ActionEvent evt) {
                  System.out.println("Typed Left Arrow");
              }
          });

これが私がやりたいことですが、魔法が見つかりません:

    getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT,0),"myGenericHandler");
    getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT,0),"myGenericHandler");
    getActionMap().put("myGenericHandler",new AbstractAction() {
              public void actionPerformed(ActionEvent evt) {
                  // determine what key caused the event...
                  // evt.getKeyCode() does not work.
                  int keyCode = performMagic(evt);
                  switch (keyCode) {
                      case KeyEvent.VK_RIGHT:
                          System.out.println("Typed Right Arrow");
                          break;
                      case KeyEvent.VK_LEFT:
                          System.out.println("Typed Left Arrow");
                          break;
                      default:
                          System.out.println("Typed unknown key");
                          break;
                  }
              }
          };
4

1 に答える 1