我在按钮上添加了以下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");
}
});