如何在按下键时锁定KeyListener

时间:2013-06-15 12:37:38

标签: java events awt keylistener

我将以下KeyListener添加到我的按钮,并注意到如果我按住任何按键,它会开始连续发射,就像我按下并快速释放它一样。我从未发布密钥,但“a:已发布”消息仍在我的控制台中打印。为什么释放侦听器被触发?如何停止重复按键?我只想要一个“a:press”,只要我拿着钥匙然后单个“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方法一样,即使(我假设)没有为重复事件创建新线程。

1 个答案:

答案 0 :(得分: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");
    }
});