2013-06-12 64 views
0

我一直在玩Java,並且添加了一個KeyListener。當我輸入一個鍵時,它打印「0」,我希望它打印鍵碼。Java AWT KeyListener不能正常工作

Key.java

import java.awt.event.*; 

public class Key implements KeyListener { 
public void keyPressed(KeyEvent e) { 

} 

public void keyReleased(KeyEvent e) { 

} 

public void keyTyped(KeyEvent e) { 
    System.out.println("TYPED: " + Integer.toString(e.getKeyCode())); 
} 
} 

Main.java

public void init() { 
    addKeyListener(new Key()); 
    addMouseListener(new Mouse()); 

    this.setBackground(new Color(100, 100, 255)); 
    this.setSize(screen); 
} 

感謝所有幫助!

+0

1)爲什麼要編寫一個小程序?如果由於規格而到期。由老師,請參考[爲什麼CS老師應該停止教Java applets](http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should-stop-teaching-java-applets/)。 2)對於Swing,通常使用基於AWT的較低級別KeyListener的鍵綁定。有關如何使用它們的詳細信息,請參見[如何使用鍵綁定](http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html)。這是基於Swing還是AWT? –

回答

1

剛剛看過的文檔:

void keyTyped(KeyEvent e) 

當調用一個鍵被輸入。請參閱 KeyEvent的類描述以獲取關鍵類型事件的定義。

所以經過介紹:

public int getKeyCode() 

返回與此事件中的鍵關聯的整數密鑰號碼。 返回:鍵盤上實際鍵的整數代碼。 (對於 KEY_TYPED事件,鍵代碼被VK_UNDEFINED

和恆VK_UNDEFINED是:

public static final int VK_UNDEFINED = 0; 

所以這是完全正常的,你只能得到0

你應該使用:

public void keyTyped(KeyEvent e) { 
    System.out.println("TYPED: " + e.getKeyChar()); 
} 

這是一個n使用這三種方法的example

0

對於KEY_TYPED事件,鍵碼未定義。檢查java文檔: http://docs.oracle.com/javase/6/docs/api/java/awt/event/KeyEvent.html#getKeyCode()

改爲使用getKeyChar()。