0

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

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

但是由于明显的原因,这是有缺陷的(如果键已经被抬起,它只会将键重置为未抬起:如果键被按下,则不会被设置为未按下)。我尝试了几种变体,但我无法让它发挥作用。

提前感谢您的帮助!

4

1 回答 1

0

您应该使用 aKeyListener来捕获键盘事件。干得好:

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因为它在您的示例中。但我认为对于通常的键盘东西,你不需要它。

于 2012-05-15T06:47:16.930 回答