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 !!!

Était-ce utile?

La solution

La solution réside dans le parent de KeyEvent (InputEvent)

  1. Utilisez les méthodes isAltDown, isControlDown, isShiftDown ou
  2. Utilisez la méthode getModifiers

Autres conseils

Puisque KeyEvent étend InputEvent, isControlDown , isShiftDown et isAltDown .

Les

KeyEvent sont probablement un peu de bas niveau s’agissant d’un widget Swing. Passez plutôt par 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;
 }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top