我在按钮上添加了以下KeyListener,并注意到如果按住任意键,它会连续触发,就像我按下和释放它一样快。我从不释放密钥,但是控制台上仍在打印“ a:released”消息。为什么释放发布监听器,如何停止重复的按键操作?只要按住键,我只想要一个“ 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方法那样工作。

最佳答案

您可以使用其他字段来指示已按下按钮:

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");
    }
});

10-08 07:34