0

我将以下 KeyListener 添加到我的按钮中,并注意到如果我按住任何键,它就会开始连续触发,就好像我正在快速按下和释放它一样。我从不释放密钥,但“a:已释放”消息仍在我的控制台中打印。为什么释放监听器被解雇,我怎样才能停止重复按键?只要我按住键,我只想要一个“a:按下”,然后当我释放键时,我只想要一个“a:释放”。

button.addKeyListener(new KeyListener() {
    @Override
    public void keyTyped(KeyEvent e) {
    }

    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println(e.getKeyChar() + ": pressed");
    }

    @Override
    public void keyReleased(KeyEvent e) {
        System.out.println(e.getKeyChar() + ": released");
    }
});

synchronized即使(我假设)没有为重复事件创建新线程,是否仍然可以使方法像方法一样工作。

4

1 回答 1

1

您可以使用附加字段来指示按钮已被按下:

button.addKeyListener(new KeyListener() {
    @Override
    public void keyTyped(KeyEvent e) {
    }

    private boolean pressed = false;

    @Override
    public void keyPressed(KeyEvent e) {
        if (!pressed) {
            System.out.println(e.getKeyChar() + ": pressed");
            pressed = true;
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        pressed = false;
        System.out.println(e.getKeyChar() + ": released");
    }
});
于 2013-06-15T12:44:13.293 回答