递增/递减运算符无法正常工作

时间:2019-02-04 19:28:55

标签: java

我试图在每次按下一个键时减小和增加一个值,代码看起来像在工作,但是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 个答案:

答案 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中。这将导致多次增加/减少操作。