2015-11-16 43 views
1

KeyListener已添加到名爲_window的JFrame中。無論何時按下某個鍵,它都會打印出用於測試它的行,但不會打印特定的鍵,如VK_A。有人可以告訴我爲什麼嗎?我的第一個想法是,這不是可以關注的,但是KeyLis根本就不會打印出來,如果是這樣的話,是正確的?KeyListener可以工作,但不會區分特定的鍵

public class Gui implements Runnable { 
public Gui() { } 

private JFrame _window; 

@Override 
public void run() { 
    _window = new JFrame("Window"); 
    ... 
    _window.addKeyListener(new KeyLis()); 
}  

class KeyLis implements KeyListener{ 

    @Override 
    public void keyTyped(KeyEvent e) { 

     System.out.println("A key has been typed!"); 

     if(e.getKeyCode() == KeyEvent.VK_A){ 
      System.out.print("A! "); 
     }  
    ... 
} 

在此代碼中,「A!」將不會打印,而是「鍵已輸入!」將。爲什麼?

回答

3

一個從KeyEventdocs片段:

public int getKeyCode() 

Returns the integer keyCode associated with the key in this event. 

Returns: 
    the integer code for an actual key on the keyboard. (For KEY_TYPED events, the keyCode is VK_UNDEFINED.) 

你的情況最重要的部分是

對於KEY_TYPED事件,鍵代碼是VK_UNDEFINED


無論是如果您想堅持使用keyTyped方法或將相應代碼移入keyReleasedkeyPressed方法,請使用getKeyChar()

(或者甚至更好,使用Key Bindings

+0

我會嘗試使用按鍵綁定,但對於這個特定的任務,我的教授想要一個KeyListener的。不知道爲什麼...但謝謝你的片段,我不知道。以前從未使用過鍵盤輸入,這非常有幫助。 – MaddoxJKingsley