Java: traitement des entrées au clavier combinées
-
03-07-2019 - |
Question
Quel est le bon moyen de séparer F1 et CTRL + F1 respectif SHIFT - CTRL + F1 dans un KeyListener enregistré derrière, par exemple un JButton?
public void keyPressed(KeyEvent event) {
int key = event.getKeyCode();
logger.debug("KeyBoard pressed char(" + event.getKeyChar() + ") code (" + key + ")");
}
.. me donne toujours 112 pour F1 , 113 pour F2 et ainsi de suite. Je comprends que je peux le gérer en prenant soin des clés keyPressed () respectives pour keyReleased pour CTRL / SHIFT / ALT / etc , mais j’espère qu’il existe un meilleur moyen.
Merci beaucoup !!!
La solution
La solution réside dans le parent de KeyEvent (InputEvent)
- Utilisez les méthodes isAltDown, isControlDown, isShiftDown ou
- Utilisez la méthode getModifiers
Autres conseils
Puisque KeyEvent étend InputEvent, isControlDown , isShiftDown et isAltDown .
InputMap
et ActionMap
.
L'événement de touche enfoncée est appelé chaque fois qu'une touche est enfoncée, évidemment. Ce n'est pas un événement à clé multiple multiple, et cela n'existe pas. Il n'y a donc pas de code clé pour la désactivation de plusieurs clés.
Il vous suffira d'utiliser une variable pour garder trace de la touche CTRL enfoncée. Cela signifie que vous devrez également utiliser un événement key up pour garder trace du moment où la clé de contrôle est relâchée.
En code 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; }