慕尼黑8549860
2022-06-04 17:45:16
我試圖在每次按下鍵時(shí)遞減和遞增一個(gè)值,代碼看起來可以工作,但 c 值沒有正確響應(yīng)。這是代碼: if (...) { ... } else if (a == 1) { frame.addKeyListener(new KeyListener() { @Override public void keyPressed(KeyEvent f) { switch (f.getKeyCode()) { case KeyEvent.VK_F: setFullScreen(); break; case KeyEvent.VK_LEFT: c--; textField.setText("c:" + c); break; case KeyEvent.VK_RIGHT: c++; textField.setText("c:" + c); break; } } } }在我的情況下,如果按下左鍵,值 c(即 1)將變?yōu)?-2 而不是 0。
2 回答

阿晨1998
TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
嘗試使用 keyReleased 而不是 keyPressed。這樣事件只會(huì)觸發(fā) 1 次。
keyPressed 事件將在您的按鍵被按下時(shí)觸發(fā)(即使您只是快速按下并釋放它,也會(huì)觸發(fā)幾個(gè) KeyEvents)。如果將增加/減少綁定到“keyReleased”,它只會(huì)在按下后釋放鍵時(shí)觸發(fā),因此只會(huì)發(fā)生 1 個(gè)增量。
此外,每次執(zhí)行 if 語句時(shí),都會(huì)將新的 KeyListener 添加到框架對(duì)象中。這將導(dǎo)致多次增加/減少操作。

手掌心
TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊
如文檔https://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html中所述,每次按鍵有 3 個(gè)按鍵事件
決定您希望使用哪個(gè)鍵事件,然后僅添加事件觸發(fā)的實(shí)例,例如 KEY_PRESSED 事件。
添加回答
舉報(bào)
0/150
提交
取消