如果您使用java KeyListener
课程,您知道如果您按住某个键keyPressed
将触发一个KeyEvent
,然后大约半秒钟将触发相同的密钥时间非常快。我想知道是否有办法让KeyEvents
禁止射击太快。我希望它们以每500毫秒一次的恒定速率保持不变。
答案 0 :(得分:5)
你可以,但诀窍是不要减慢事件的发放速度,而是减慢你处理它们的速度:
KeyListener kl = new KeyListener() {
private long lastPressProcessed = 0;
@Override
public void keyPressed(KeyEvent e) {
if(System.currentTimeMillis() - lastPressProcessed > 500) {
//Do your work here...
lastPressProcessed = System.currentTimeMillis();
}
}
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) { }
};
答案 1 :(得分:4)
不,这完全取决于系统。您必须侦听keyPressed
个事件,自行启动计时器以固定速率触发事件并在下一个keyReleased
事件中停止。
尝试这样的事情:
component.addKeyListener(new KeyListener() {
Timer t = new Timer();
TimerTask tt;
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
tt.cancel();
tt = null;
}
@Override
public void keyPressed(KeyEvent e) {
if (tt != null)
return;
tt = new TimerTask() {
@Override
public void run() {
System.out.println(System.currentTimeMillis() % 1000);
}
};
t.scheduleAtFixedRate(tt, 0, 500);
}
});
答案 2 :(得分:2)
这是由您的操作系统控制的。但是你可以很容易地让你的处理程序检查它自上次触发后的时间长度并做出相应的响应。
答案 3 :(得分:1)
通常,键的自动重复率由系统设置;我不知道它是否可以在Java中更改。但是,您可以使用事件到达时间,直到您最后一次反应后500ms(或在键释放后,应该为快速键入的用户清除计时器)对其进行反应。