2016-12-14 80 views
1

我對Java有點新,所以,如果我做錯了什麼,對不起。當我按下W按鈕時,我想讓我的程序說The W key has been pressed。我一直有這個問題。下面是我的代碼的輪廓: Java - KeyListener問題

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

的KeyListener的沒有任何迴應。我想這可能是因爲循環,但我真的不知道。任何人都可以擴展爲什麼會發生這種情況,我該如何解決這個問題?

+2

請勿使用KeyListeners。使用密鑰綁定 – ControlAltDel

+0

你在哪裏實例化你的'Main'類?看起來代碼在這裏不見了。 – Berger

+0

此代碼不能編譯 – ControlAltDel

回答

0

的事情是:只要聲明一類是一個KeyListener的......不會奇蹟般地創造連接在運行時是必需的。

換句話說:聽衆的想法是它在某個點上是註冊;並且只有已註冊聽衆將被通知事件。

因此,你只需要調用

addKeyListener(this) 

某處類之內;例如在你的構造函數中。

或者更具體地說:您創建了一個方法keyListener()這將使該addKeyListener()調用 ...但:有可能是在您的源代碼keyListener()沒有電話!

而只是爲了記錄:keyListener()不是一個方法的好名字;例如,您最好將它稱爲registerListeners()

+0

謝謝,我現在修復它! –