基本布尔状态问题

时间:2012-05-15 06:27:39

标签: java swing

我正在尝试编写一段代码,以便在按下某个键时它会执行某些操作,但是必须释放该键然后再次按下以重新触发该事件。因此,如果用户只是按下键,它就不会一遍又一遍地进行,而是必须反复按下和释放。
到目前为止,我有:

if(keyLifted)
{
    if(Keyboard.isKeyDown(45))
    {
        keyLifted = false;
        dostuff;
    }
    else if(Keyboard.isKeyDown(46))
    {
        keyLifted = false;
        dostuff();
    }
    else
    {
        keyLifted = true;
    }
}

但是由于显而易见的原因,这是有缺陷的(如果钥匙已被抬起,它只会将钥匙重置为未抬起:如果钥匙被按下,它将不会被设置为未按下)。我尝试了几种变体,但我不能让它起作用。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您应该使用KeyListener来捕获键盘事件。你走了:

public class KeyListenerExample extends JFrame {
    public KeyListenerExample() {
        addKeyListener(new KeyAdapter() {
            private boolean keyLifted;

            public void keyReleased(KeyEvent e) {
                keyLifted = true;
            }

            public void keyPressed(KeyEvent e) {
                keyLifted = false;
                switch (e.getKeyChar()) {
                    case 45:
                        doStuff();
                        break;

                    case 46:
                        doStuff();
                        break;
                }
            }
        });
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    private void doStuff() {
        System.out.println("stuff");
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        new KeyListenerExample();
    }
}

我保留了keyLifted因为它在你的例子中。但我认为对于通常的键盘来说你不需要它。