web-dev-qa-db-fra.com

Java KeyListener: Retour au clavier, Esc en entrée

Dans la méthode KeyTyped, comment savoir si Backspace ou Esc est pressé?

9
Justin

http://www.fileformat.info/info/unicode/char/8/index.htm

Lorsque arg0.getKeyChar() est converti en un int: (int)arg0.getKeyChar(), la touche Retour arrière affiche la valeur 8 et la touche Échap la valeur 27.

3
Justin

En supposant que vous avez correctement connecté le KeyListener et mis en œuvre les méthodes requises pour ce KeyListener, pour détecter des pressions de touche spécifiques, ajoutez simplement le code suivant:

public void keyReleased(KeyEvent ke) 
{
    if(ke.getKeyCode() == KeyEvent.VK_BACK_SPACE)
    {  
        //code to execute if backspace is pressed
    }

    if(ke.getKeyCode() == KeyEvent.VK_ESCAPE)
    {
        //code to execute if escape is pressed
    }
}

Les javadocs de la classe KeyEvent sont disponibles à l’adresse suivante: KeyEvent javadocs .
Vous y trouverez une liste de tous les codes de clé virtuels Java utilisés pour détecter les entrées au clavier lors de l’implémentation de Java KeyListeners et de KeyEvents. Plus d'informations sur KeyListeners peuvent être trouvées ici: Comment écrire un auditeur de clé . Pour utiliser la méthode keyTyped telle que demandée, voir réponse de gangqinlaohu .

16
BMFredrick

Je comprends que c’est un sujet très ancien, mais je voulais ajouter une réponse qui m’a beaucoup aidé à résoudre le même problème.

Je fais une entrée de discussion pour un programme Java, et il vaut mieux utiliser KeyTyped plutôt que pressé et relâché (car cela exclut la nécessité de filtrer la plupart des caractères). Quoi qu'il en soit, je voulais que les caractères de retour arrière soient effacés, mais le .getKeyCode () renvoyait toujours 0 selon la documentation. Cependant, vous pouvez utiliser .getKeyChar () pour renvoyer le caractère (qui apparaîtra probablement sous la forme d'un carré) et le caractère d'échappement '\ b' pour effectuer une comparaison.

if(tmp.getKeyChar().equals('\b')) { ... }
3
Sh4d0wsPlyr

Uniquement pour Java 7/jdk1.7 et supérieur: Si vous vérifiez par rapport à event.getKeyCode(), essayez la méthode event.getExtendedKeyCode(). Dans le cas de l'espace arrière, le code correct sera renvoyé (dans ce cas, 8) au lieu d'un 0 absolu. De cette manière, il n'est pas nécessaire de vérifier avec \b:

if (e.getExtendedKeyCode() == KeyEvent.VK_BACK_SPACE) {
    System.out.println("Backspace pressed");
}
2
spaceemotion

Vous pouvez également utiliser e.getExtendedKeyCode() dans keyTyped et il renvoie des valeurs non nulles qui semblent correctes.

0
EntangledLoops

Personnellement, je préfère utiliser l'événement KeyPressed pour des clés autres que des lettres/chiffres, car lorsque vous tapez les touches Retour arrière ou Entrée, rien n'est réellement saisi à proprement parler. Voici ce que j'ai fait qui a fonctionné (assurez-vous que KeyCode et KeyEvent sont importés de javafx.scene.input)!

MyTextArea.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>(){
    @Override
    public void handle(KeyEvent event) {
        if (event.getCode().equals(KeyCode.BACK_SPACE)){
            System.out.println("Success");
        }
    }
});

Faites-moi savoir si cela a fonctionné pour vous :)

0
Josh Narsu