2016-12-14 2 views
1

Je suis un peu nouveau à Java, désolé si je fais quelque chose de mal. Je veux que mon programme dise The W key has been pressed quand j'appuie sur le bouton W. J'ai eu un peu de problèmes avec ça. Voici un aperçu de mon code: Java - KeyListener questions

public class Main extends JFrame implements ActionListener, KeyListener { 

    public void keyListener(){ 
     addKeyListener(this); 
     setFocusable(true); 
     setFocusTraversalKeysEnabled(false); 
    } 



    public void keyPressed(KeyEvent e) { 
     int code = e.getKeyCode(); 
     if (code == KeyEvent.VK_W){ 
     System.out.println("W is pressed"); 
     } 
    } 




    @SuppressWarnings("null") 
    public static void main(String[] args) throws InterruptedException { 
    //Initial things like variables and JFrame setup (Like: JFrame frame = new JFrame("FrameDemo");) 
     for(step = 0; step == step; step++){ 
      for(i = 0; i < constructor.length; i++){ 
      //Some code 
      constructor[i].draw(g); 
      } 
     } 
    } 
} 

Le KeyListener ne répond pas du tout. Je pense que cela pourrait être à cause de la boucle mais honnêtement, je n'en ai aucune idée. Quelqu'un peut-il expliquer pourquoi cela se passe et comment je pourrais le réparer?

+2

N'utilisez pas KeyListeners. Utiliser les liaisons de touches – ControlAltDel

+0

Où instanciez-vous votre classe 'Main'? Il semble que le code manque ici. – Berger

+0

Ce code ne compile pas – ControlAltDel

Répondre

0

La chose est: juste déclarant une classe d'être un KeyListener ... ne crée pas comme par magie que connexion qui est nécessaire à l'exécution. En d'autres termes: l'idée d'un auditeur est qu'il est enregistré à un certain point; et seulement enregistré Les auditeurs seront informés des événements.

Par conséquent, vous ne devez appeler

addKeyListener(this) 

quelque part dans votre classe; par exemple au sein de votre constructeur.

Ou plus précisément: Vous avez créé une méthode keyListener() qui ferait que addKeyListener() appel ... mais: il n'y a probablement pas appel à keyListener() dans votre code source!

Et juste pour l'enregistrement: keyListener() n'est pas un bon nom pour une méthode; vous devriez mieux l'appeler registerListeners() par exemple.

+0

Merci, je l'ai réparé maintenant! –