我将以下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
方法一样,即使(我假设)没有为重复事件创建新线程。
答案 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");
}
});