到計算機:爲什麼KeyAdapter不能理解shift +1 =?
int key = e.getKeyCode();
if(e.getKeyCode() == VK_Shift && e.getKeyCode() == VK_1){
text = "!";
}
不做任何事情,但對我來說,應該將其設置爲一個感嘆號。爲什麼這不工作?我正在嘗試製作遊戲,並且在聊天框中,我需要在用戶進行Shift 1時將文本設置爲感嘆號。
到計算機:爲什麼KeyAdapter不能理解shift +1 =?
int key = e.getKeyCode();
if(e.getKeyCode() == VK_Shift && e.getKeyCode() == VK_1){
text = "!";
}
不做任何事情,但對我來說,應該將其設置爲一個感嘆號。爲什麼這不工作?我正在嘗試製作遊戲,並且在聊天框中,我需要在用戶進行Shift 1時將文本設置爲感嘆號。
爲什麼不能正常工作?
你問一個值(e.getKeyCode()
)是否等於既VK_Shift
和VK_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()
來代替。
謝謝,雖然這樣好多了,但當我按shift時,我得到一個醜陋的盒子:http://prntscr.com/3ihgn3 – user3625168
@ user3625168:嗯,我們還沒有足夠的信息知道爲什麼發生這種情況,但這聽起來像是一個不同的問題。你應該分開「我可以檢測用戶輸入Shift-1嗎?」來自「當我發現它時我能做正確的事情嗎?」 –
這是我的密鑰發佈代碼:http://pastebin.com/WcYaZm34 – user3625168
你對哪些事件做出反應? –