web-dev-qa-db-fra.com

comment puis-je détecter les touches fléchées en Java?

Je sais comment implémenter un auditeur clé; ce n'est pas le problème.

public void keyTyped(KeyEvent event) {
    if (event.getKeyChar() == KEY_LEFT) {
        cTDirection = LEFT;
    }
    if (event.getKeyChar() == 40) {
        cTDirection = DOWN;
    }
    if (event.getKeyChar() == 39) {
        cTDirection = RIGHT;
    }
    if (event.getKeyChar() == 38) {
        cTDirection = UP;
    }
}

Qu'est-ce que je mets où le LEFT_KEY/40/39/38? Quand j'ai créé un keylistener et tapé les clés, je pense avoir entre 37 et 40 ans. Je ne sais pas quoi mettre pour écouter uniquement les touches fléchées.

8
Zeveso

Je recommanderais d'utiliser:

if (event.getKeyCode() == KeyEvent.VK_UP) {
...
}

répéter avec VK_DOWN, VK_LEFT, VK_RIGHT.

Il existe des codes distincts pour le clavier numérique: VK_KP_UP, VK_KP_DOWN, VK_KP_LEFT, VK_KP_RIGHT si vous en avez besoin.

Voir KeyEvent pour tous les codes.

15
robert_x44

KeyEvent.VK_LEFT, KeyEvent.VK_RIGHT, etc.

De plus, vous devriez utiliser getKeyCode, pas getKeyChar. getKeyChar est pour les touches qui correspondent réellement à des caractères (lettres, chiffres, espaces, etc.).

3
Laurence Gonsalves

Utilisation 

if ( e.getKeyCode() == KeyEvent.VK_LEFT){
     //Do something
}

Les autres clés sont:

KeyEvent.VK_UP 

KeyEvent.VK_RIGHT 

KeyEvent.VK_DOWN 

2

Voici ce que j'ai fait pour que cela fonctionne:

public void keyPressed (KeyEvent e) {
        int c = e.getKeyCode ();
        if (c==KeyEvent.VK_UP) {                
            b.y--;   
        } else if(c==KeyEvent.VK_DOWN) {                
            b.y++;   
        } else if(c==KeyEvent.VK_LEFT) {                
            b.x--;   
        } else if(c==KeyEvent.VK_RIGHT) {                
            b.x++;   
        }
        System.out.println (b.x);
        b.repaint ();
    }

Pour moi, cela ne fonctionne pas si je le mets dans KeyPressed, mais fonctionne bien si je le mets dans KeyTyped.

1
Abhas Tandon

d'abord déclarer la méthode init 

public void init(){

this.addKeyListener(new keyb());}

puis utilisez la classe interne qui implémente KeyListner

class keyb implements KeyListener{

    public void keyPressed (KeyEvent e){
    if(e.getKeyCode()==KeyEvent.VK_UP){
        y-=50;

    }else if(e.getKeyCode()==KeyEvent.VK_DOWN){
        y+=50;
    }else if(e.getKeyCode()==KeyEvent.VK_RIGHT){            
        x+=50;
    }else if(e.getKeyCode()==KeyEvent.VK_LEFT){
        x-=50;
    }

    repaint();

    }
    public void keyReleased (KeyEvent e){}
    public void keyTyped (KeyEvent e){}
    }

vous pouvez également utiliser un adaptateur au lieu d'écrire Keyreleased & keyTyped .... comme vous le savez 

0
ahmed reda

Utilisez la méthode getKeyCode() et comparez la valeur renvoyée aux constantes KeyEvent.VK_LEFT, KeyEvent.VK_RIGHT, KeyEvent.VK_UP et KeyEvent.VK_DOWN.

0
Progman