Java:複合キーボード入力の処理
-
03-07-2019 - |
質問
F1 と CTRL + F1 それぞれの SHIFT - CTRL + F1 は、JButtonなどの背後に登録されたKeyListener内にありますか?
public void keyPressed(KeyEvent event) {
int key = event.getKeyCode();
logger.debug("KeyBoard pressed char(" + event.getKeyChar() + ") code (" + key + ")");
}
..は常に F1 に112、 F2 に113などを提供します。 CTRL / SHIFT / ALT /などのkeyReleasedのkeyPressed()を自分で処理することで処理できることを理解しています、しかしより良い方法があることを願っています。
本当にありがとう!!!
解決
ソリューションはKeyEvent(InputEvent)の親にあります
- isAltDown、isControlDown、isShiftDownメソッドを使用するか、
- getModifiersメソッドを使用する
他のヒント
KeyEventはInputEventを拡張するため、 isControlDown 、 isShiftDown および isAltDown 。
Swingウィジェットを扱う場合、
KeyEvent
はおそらく少し低レベルです。代わりに、 InputMap
および ActionMap
を使用します。
キーダウンイベントは、明らかにキーがダウンするたびに呼び出されます。 マルチキーダウンイベントではなく、そのようなことはありません。そのため、複数のキーがダウンするためのキーコードはありません。
変数を使用して、押されているcrtlキーを追跡する必要があります。これは、コントロールキーが放されたときを追跡するために、キーアップイベントも使用する必要があることを意味します。
pusedoコードの場合:
// CRTLKeyCode is whatever the code is for the ctrl key private boolean ctrlPressed = false; onKeyDown(KeyEvent event){ int key = event.getKeyCode(); if(key == CRTLKeyCode) ctrlPressed = true; else if(ctrlPressed && key == 112) //Perform your action } onKeyUp(KeyEvent event){ int key = event.getKeyCode(); if(key == CRTLKeyCode) ctrlPressed = false; }
所属していません StackOverflow