我试图在每次按下键时递减和递增一个值,代码看起来可以工作,但 c 值没有正确响应。这是代码: 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)将变为 -2 而不是 0。
2 回答
阿晨1998
TA贡献2037条经验 获得超6个赞
尝试使用 keyReleased 而不是 keyPressed。这样事件只会触发 1 次。
keyPressed 事件将在您的按键被按下时触发(即使您只是快速按下并释放它,也会触发几个 KeyEvents)。如果将增加/减少绑定到“keyReleased”,它只会在按下后释放键时触发,因此只会发生 1 个增量。
此外,每次执行 if 语句时,都会将新的 KeyListener 添加到框架对象中。这将导致多次增加/减少操作。
手掌心
TA贡献1942条经验 获得超3个赞
如文档https://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html中所述,每次按键有 3 个按键事件
决定您希望使用哪个键事件,然后仅添加事件触发的实例,例如 KEY_PRESSED 事件。
添加回答
举报
0/150
提交
取消