Java: kombinierte Tastatureingabe Handling
-
03-07-2019 - |
Frage
Was ist der richtige Weg zwischen F1 und das heißt STRG + F1 jeweiligen SHIFT zu trennen - + F1 innerhalb eines KeyListener registriert hinter dh ein JButton?
public void keyPressed(KeyEvent event) {
int key = event.getKeyCode();
logger.debug("KeyBoard pressed char(" + event.getKeyChar() + ") code (" + key + ")");
}
.. gibt mir immer 112 F1 , 113 für F2 und so weiter. Ich verstehe, dass ich es durch die Pflege der keyPressed () jeweils für keyReleased für STRG / SHIFT / ALT / etc auf meinem eigenen verarbeiten kann , aber ich hoffe, dass es ein besserer Weg.
Vielen vielen Dank !!!
Lösung
Die Lösung liegt in den Eltern von KeyEvent (Inputevent)
- Verwenden Sie die isAltDown, isControlDown, isShiftDown Methoden oder
- Verwenden Sie die getModifiers Methode
Andere Tipps
Da KeyEvent erstreckt Inputevent isControlDown , isShiftDown und
KeyEvent
s ist wahrscheinlich etwas niedrige Ebene, wenn sie mit einem Swing-Widget handelt. Stattdessen geht durch InputMap
und ActionMap
.
Der Schlüssel-Down-Ereignis wird aufgerufen, wenn eine Taste gedrückt ist, offensichtlich. Es ist nicht ein mehrere Schlüssel-Down-Ereignis, und es gibt nicht so etwas, so gibt es keinen Schlüsselcode für mehrere Schlüssel sind nach unten.
Sie werden nur haben, um eine Variable zu verwenden, den Überblick über die Strg-Taste halten gedrückt wird. Das heißt, Sie wollen auch eine Schlüsselveranstaltung verwenden, um den Überblick zu behalten, wenn die Steuer-Taste losgelassen wird.
In pusedo Code:
// 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; }