2013-07-01 52 views
1

我加了鍵盤輸入到我的比賽方式,我總是這樣,用KeyListener,但由於某種原因,在我的程序每當我點擊窗口之外,點擊後面的,關鍵輸入只是停止工作。以下是我在我的keyPressedkeyReleased方法:Java輸入停止工作時窗口是聚焦今天

public void keyPressed(KeyEvent e) { 

    int code = e.getKeyCode(); 

    switch (code) { 
    case KeyEvent.VK_W: 
     keys[0] = true; 
     break; 
    case KeyEvent.VK_D: 
     keys[1] = true; 
     break; 
    case KeyEvent.VK_S: 
     keys[2] = true; 
     break; 
    case KeyEvent.VK_A: 
     keys[3] = true; 
     break; 
    } 
} 

public void keyReleased(KeyEvent e) { 

    int code = e.getKeyCode(); 

    switch (code) { 
    case KeyEvent.VK_W: 
     keys[0] = false; 
     break; 
    case KeyEvent.VK_D: 
     keys[1] = false; 
     break; 
    case KeyEvent.VK_S: 
     keys[2] = false; 
     break; 
    case KeyEvent.VK_A: 
     keys[3] = false; 
     break; 
    } 
} 
+0

這並沒有太多的繼續。你有沒有在這些方法中設置斷點?你到底做了什麼來調試呢? –

+0

您是否針對窗口焦點事件做了任何處理? (更具體地說,迴應未聚焦的事件?) –

+0

@JimGarrison我已經研究了幾個小時,沒有運氣。這從來沒有發生過。 –

回答

3

KeyListener是臭名昭著的有重點的問題。爲了讓KeyListener引發一個事件,它所註冊的組件必須不僅是可以聚焦的,而且必須具有焦點。

相反,你應該使用Key Bindings這對如果您使用您有另一個(幾個)問題AWT組件克服這些短缺憾

修訂

機制。從本質上講,你需要使組件可聚焦的時候隨叫隨到requestFocusInWindow使用點擊

+0

一個三明治可以營養,但我不知道'KeyListener'如何。也許你的意思是「臭名昭着」? (+1指向最可能的問題,順便說一句) –

+1

@TedHopp我想過說:「在一個**完整的痛苦」,但認爲這是將在上面;) – MadProgrammer

+0

我看着什麼該鏈接,但是如何爲awt畫布或Jframe添加鍵綁定? –

1

看起來你可能會試圖做的鍵盤組件的動畫。請參閱Motion With the Keyboard,它解釋了使用KeyListener時出現的一些問題,並展示瞭如何使用Key Bindings。

相關問題