2016-12-14 3 views
1

Ich bin ein wenig neu in Java, tut mir leid, wenn ich etwas falsch mache. Ich möchte, dass mein Programm The W key has been pressed sagt, wenn ich die Taste W drücke. Ich habe ein paar Probleme damit gehabt. Hier eine Übersicht meines Code: Java - KeyListener Probleme

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

Die KeyListener nicht überhaupt nicht reagiert. Ich denke, das könnte wegen der Schleife sein, aber ich habe ehrlich gesagt keine Ahnung. Kann jemand erklären, warum dies geschieht und wie ich es beheben könnte?

+2

Verwenden Sie keine KeyListener. Verwenden Sie Tastenkombinationen – ControlAltDel

+0

Wo instanziieren Sie Ihre 'Main' Klasse? Es scheint, dass Code hier fehlt. – Berger

+0

Dieser Code wird nicht kompiliert – ControlAltDel

Antwort

0

Die Sache ist die: nur eine Klasse erklärt ein KeyListener zu sein ... schafft nicht auf magische Weise, dass Verbindung die zur Laufzeit erforderlich ist.

Mit anderen Worten: die Idee eines Zuhörers ist, dass es zu einem Zeitpunkt registriert ist; und nur registriert Zuhörer werden über Ereignisse benachrichtigt.

Sie benötigen daher nur

addKeyListener(this) 

irgendwo in Ihrer Klasse zu nennen; zum Beispiel in Ihrem Konstruktor.

Oder genauer gesagt: haben Sie eine Methode keyListener(), die diesen addKeyListener() Anruf würde ... aber: Es gibt wahrscheinlich keinen Aufruf zu keyListener() im Quellcode!

Und nur für das Protokoll: keyListener() ist kein guter Name für eine Methode; Sie sollten es besser registerListeners() zum Beispiel nennen.

+0

Danke, ich habe es jetzt behoben! –