5

JButton の背後に登録された KeyListener 内で+とそれぞれを分離する正しい方法は何F1ですか?CTRLF1SHIFTCTRLF1

public void keyPressed(KeyEvent event) {
    int key = event.getKeyCode();

    logger.debug("KeyBoard pressed char(" + event.getKeyChar() + ") code (" + key + ")");
}

.. は常に 112 for F1、113 forF2などを返します。CTRLkeyReleased for / SHIFT/ / などのそれぞれのkeyPressed()を自分で処理することで対処できることは理解していますALTが、より良い方法があることを願っています。

大変感謝します!!!

4

4 に答える 4

4

ソリューションは KeyEvent (InputEvent) の親にあります

  1. isAltDown、isControlDown、isShiftDown メソッドを使用するか、
  2. getModifiers メソッドを使用する
于 2008-12-30T18:13:57.843 に答える
1

KeyEventSwingウィジェットを扱う場合、おそらく少し低レベルです。代わりに通過InputMapActionMapます。

于 2008-12-30T19:26:40.193 に答える
1

KeyEvent は InputEvent を継承しているため、isControlDownisShiftDown、およびisAltDownです。

于 2008-12-30T18:16:04.767 に答える
0

キーダウン イベントは、キーが押されるたびに呼び出されます。複数のキーが押されたイベントではなく、そのようなことはないため、複数のキーが押された場合のキーコードはありません。

変数を使用して、押された crtl キーを追跡する必要があります。これは、コントロール キーがいつ離されたかを追跡するためにキー アップ イベントを使用する必要があることも意味します。

pusedo コードでは:

// CRTLKeyCodeは ctrl キーのコードです
プライベート ブール ctrlPressed = false;

 onKeyDown(KeyEvent イベント){
     int キー = event.getKeyCode();
     if(キー == CRTLKeyCode )
        ctrlPressed = true;
     else if(ctrlPressed && キー == 112)
        //アクションを実行
 }
 onKeyUp(KeyEvent イベント){
     int キー = event.getKeyCode();
     if(キー == CRTLKeyCode )
        ctrlPressed = false;
 }
于 2008-12-30T18:22:44.863 に答える