If you use the java KeyListener class you know that if you hold down a key keyPressed will fire one KeyEvent, and then about half a second later will fire the same key many times very very fast. I would like to know if there is a way to keep the KeyEvents from firing too fast. I would like them to be at a nice constant rate of about once every 500 ms.
You can, but the trick is to not slow down the firing of events, but to slow down how fast you process them:
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) { }
};
No, this is completely system dependent. You would have to listen for keyPressed events, start a timer on your own that fires events at a fixed rate and stop it at the next keyReleased event.
Try something like this:
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);
}
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With