[英]KeyTypedEvent KeyEvent's KeyCode is always 0?
我在NetBeans IDE中有一個Java Swing應用程序。
我創建了一個表單並將KeyListener附加到我的各種控件中:
jButton1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
keyTypedEvent(evt);
}
});
和keyTypedEvent
定義如下:
private void keyTypedEvent(java.awt.event.KeyEvent evt)
{
System.out.println(evt);
appendDisplay(String.valueOf(evt.getKeyChar()));
}
我在evt
添加了一個println
,看看會發生什么,並驗證我的keylistener是否正常工作。 當我構建並運行我的應用程序時,我意識到輸出似乎總是有一個keycode = 0
為了驗證這一點,我將println更改為evt.getKeyCode()
並且始終返回0。
我可能完全誤解了KeyCode的功能,但我認為它可以與Oracle文檔中的值進行協調:
http://docs.oracle.com/javase/7/docs/api/constant-values.html#java.awt.event.KeyEvent.VK_ESCAPE
例如,VK_ESCAPE的值為27。
keyTyped()
事件僅用於生成字符輸入的鍵。 如果您想知道何時按下或釋放任何鍵,您需要實現keyPressed()
或keyReleased()
。
從KeyEvent API:
“鍵入類型”事件是更高級別的,通常不依賴於平台或鍵盤布局。 它們是在輸入Unicode字符時生成的,是查找字符輸入的首選方法....
對於按鍵和鍵釋放事件,getKeyCode方法返回事件的keyCode。 對於鍵類型事件,getKeyCode方法始終返回VK_UNDEFINED。
關於JButton
KeyListener
所有建議都是錯誤的,這意味着Button1.addKeyListener(new java.awt.event.KeyAdapter() {
這些事件在 SwingAction
JButtons API
正確實現 ,使用SwingAction
或添加ActionListener
從JButton
監聽Mouse and Key Event
基本上所有內容都在Oracle教程中描述如何使用按鈕,復選框和單選按鈕
這很大程度上取決於被按下的鍵。 可能你需要KeyListener
和keyPressed
方法覆蓋,因為keyTyped
沒有在不可打印的字符上觸發。
查看keyTyped
和keyPressed
之間的區別: KeyListener,keyPressed與keyTyped
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.