2014-05-12 89 views
0

到計算機:爲什麼KeyAdapter不能理解shift +1 =?

int key = e.getKeyCode(); 
if(e.getKeyCode() == VK_Shift && e.getKeyCode() == VK_1){ 
text = "!"; 
} 

不做任何事情,但對我來說,應該將其設置爲一個感嘆號。爲什麼這不工作?我正在嘗試製作遊戲,並且在聊天框中,我需要在用戶進行Shift 1時將文本設置爲感嘆號。

+0

你對哪些事件做出反應? –

回答

1

爲什麼不能正常工作?

你問一個值(e.getKeyCode())是否等於既VK_ShiftVK_1。除非那兩個具有相同的值(他們不這樣做),否則if條件可以從來沒有被滿足。

文檔使這很清楚:

虛擬鍵碼被用於報告該鍵盤鍵已被按下,而不是由一個或多個鍵擊(如「A」的組合產生的字符,來自輪班和「a」)。

例如,按住Shift鍵將導致帶有VK_SHIFT keyCode的KEY_PRESSED事件,同時按下'a'鍵將導致VK_A keyCode。在'a'鍵被釋放後,一個KEY_RELEASED事件將被觸發並且VK_A。另外,生成keyChar值爲'A'的KEY_TYPED事件。

所以,換句話說,你需要處理 KEY_PRESSED事件,想起了第一個(移動)作爲上下文第二(1)。

也許你應該尋找KEY_TYPED事件(使用KeyAdapter.keyTyped())和使用e.getKeyChar()來代替。

+0

謝謝,雖然這樣好多了,但當我按shift時,我得到一個醜陋的盒子:http://prntscr.com/3ihgn3 – user3625168

+0

@ user3625168:嗯,我們還沒有足夠的信息知道爲什麼發生這種情況,但這聽起來像是一個不同的問題。你應該分開「我可以檢測用戶輸入Shift-1嗎?」來自「當我發現它時我能做正確的事情嗎?」 –

+0

這是我的密鑰發佈代碼:http://pastebin.com/WcYaZm34 – user3625168

相關問題