web-dev-qa-db-fra.com

KeyListener, keyPressed versus keyTyped

J'ai un JFrame (bien une classe qui étend JFrame) et je veux faire une action lorsque j'appuie sur la touche F5. J'ai donc demandé à la classe d'implémenter KeyListener. Et avec cela, sont venues trois méthodes, keyPressed, keyReleased et keyTyped.

Laquelle de ces méthodes devrais-je utiliser pour écouter si vous appuyez sur F5? keyPressed ou keyTyped? J'ai actuellement ce qui suit, mais il n'imprime rien lorsque j'appuie sur F5.

public void keyPressed(KeyEvent e) {
    if(e.getKeyCode() == KeyEvent.VK_F5)
        System.out.println("F5 pressed");
}

public void keyReleased(KeyEvent arg0) {
    // TODO Auto-generated method stub

}

public void keyTyped(KeyEvent arg0) {
    // TODO Auto-generated method stub

}
36
CodeGuy
keyPressed - when the key goes down
keyReleased - when the key comes up
keyTyped - when the unicode character represented by this key is sent by the keyboard to system input.

Personnellement, j'utiliserais keyReleased pour cela. Il ne tirera que lorsqu'ils lèveront leur doigt.

Notez que keyTyped ne fonctionnera que pour quelque chose qui peut être imprimé (je ne sais pas si F5 peut ou non) et je pense qu’il se déclenchera encore et encore si la touche est maintenue enfoncée. Ce serait utile pour quelque chose comme ... déplacer un personnage sur l'écran ou quelque chose.

40
corsiKa

Ni. Vous ne devez PAS utiliser un KeyLIstener.

Swing a été conçu pour être utilisé avec les raccourcis clavier. Lisez la section du didacticiel Swing sur Comment utiliser les raccourcis clavier .

18
camickr
private String message;
private ScreenManager s;


//Here is an example of code to add the keyListener() as suggested; modify 
public void init(){
Window w = s.getFullScreenWindow();
w.addKeyListener(this);

public void keyPressed(KeyEvent e){
    int keyCode = e.getKeyCode();
        if(keyCode == KeyEvent.VK_F5)
            message = "Pressed: " + KeyEvent.getKeyText(keyCode);
}
0
Leo Schoenborn

Vous devez utiliser keyPressed si vous voulez un effet immédiat et keyReleased si vous voulez l'effet après avoir relâché la touche. Vous ne pouvez pas utiliser keyTyped car F5 n'est pas un caractère. keyTyped est activé uniquement lorsque vous appuyez sur un caractère.

0
Ankit Ostwal