我试图在每次按下一个键时减小和增加一个值,代码看起来像在工作,但是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。
答案 0 :(得分:0)
每一次按键都有3个按键事件,如文档https://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html
中所述确定要使用的键事件,然后仅添加触发该事件的实例,例如在KEY_PRESSED事件上。
答案 1 :(得分:0)
尝试使用keyReleased代替keyPressed。这样,事件将仅触发1次。
按下按键时将触发keyPressed事件(即使您快速按下并释放它,也会触发多个KeyEvent)。如果将增加/减少绑定到“ keyReleased”,则仅在按下后释放键时才会触发,因此只会出现1个增量。
此外,每次执行if语句时,都会将新的KeyListener添加到框架Object中。这将导致多次增加/减少操作。