简体   繁体   English

如何在按下键时锁定KeyListener

[英]How to lock KeyListener while key is pressed

I added the following KeyListener to my button and noticed that if I hold any key down, it starts firing continuously as though I were pressing and releasing it very fast. 我在按钮上添加了以下KeyListener,并注意到如果按住任意键,它会连续触发,就像我按下和释放它一样快。 I never release the key, yet the "a: released" message is still being printed in my console. 我从不释放密钥,但是控制台上仍在打印“ a:released”消息。 Why is the release listener being fired and how can I stop the repeated key presses? 为什么释放发布监听器,如何停止重复的按键操作? I just want a single "a: pressed" for as long as I hold the key and then a single "a: released" when I release the key. 只要按住键,我只想要一个“ 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");
    }
});

Is there anyway to make the methods act like synchronized methods even though (I'm assuming) new threads aren't being created for the repeated events. 无论如何,即使没有为重复的事件创建新线程,也可以使这些方法像synchronized方法一样工作。

You can use an additional field to indicate that the button was pressed: 您可以使用其他字段来指示已按下按钮:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM