9
votes

Comment détecter les flèches de flèche à Java?

Je sais comment mettre en œuvre 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;
    }
}


1 commentaires

Cela devrait avoir "AWT" dans l'étiquette de liste ou dans le titre.


7 Réponses :


3
votes

keyevent.vk_left , keevent.vk_right , etc.

En outre, vous devez utiliser getkeycode , pas getkeychar . getkeychar est destiné aux clés qui correspondent réellement à des caractères (lettres, chiffres, espaces, etc.).


5 commentaires

Je veux juste les touches fléchées régulières ... qui n'affecte pas mes flèches!


@user - oui il fait affecte les touches fléchées.


@ user516664 qui est le code pour les touches fléchées "régulières". Peut-être que vous voulez les flèches de clavier numériques à la place, auquel cas utilisez vk_kp_left , etc. Si cela ne fonctionne toujours pas, dites-nous ce que getkeycode retourne pour votre "flèche ordinaire clés".


En fait, j'ai vu un exemple qui a travaillé avec vk_left et tout travaille, mais ce n'était pas pour moi - il revenait 37 pensée 40 dans l'ordre à gauche en haut juste vers le bas


@ user516664: uh ... vk_left = 37, vk_up = 38, vk_right = 39, vk_down = 40. Voir le tableau ici: télécharger.oracle.com/javase/6/docs/api/...



0
votes

Utilisez le getkeycode () méthode et comparez la valeur renvoyée à nouveau keevent.vk_left , keevent.vk_right , keyevent.vk_up < / code> et keyevent.vk_down constantes.


1 commentaires

Je veux juste les touches fléchées régulières ... qui n'affecte pas mes flèches!



17
votes

Je recommanderais d'utiliser: xxx

répéter avec vk_down, vk_left, vk_right .

Il existe des codes séparés 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.


2 commentaires

Je veux juste les touches fléchées régulières ... qui n'affecte pas mes flèches!


Ce sont les codes des «touches fléchées régulières». Si vous rencontrez toujours des problèmes, je vous suggère de poster plus de votre code parce que vous avez un problème ailleurs.



2
votes

Utilisez

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


1 commentaires

Je veux juste les touches fléchées régulières ... qui n'affecte pas mes flèches!



1
votes

Voici ce que j'ai fait pour le faire fonctionner:

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 ();
    }


1 commentaires

S'il vous plaît, n'utilisez pas de marque aléatoire sur laquelle vous avez vu ailleurs. Utilisez les boutons présentés dans la barre d'outils de la zone d'édition et la lecture, comment formater votre code et votre texte, en commençant par la FAQ. Merci et bienvenue.



-1
votes

BTW dans KeyAdapter -> KeyTyped GetChatRarcode () n'a pas fonctionné Vous devriez essayer Keyrimprimé ou KeyReleased


0 commentaires

0
votes

PREMIER DÉCLARCARE INIT MÉTHODE

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){}
    }


0 commentaires