Hola,
El hilo que está ejecutando el KeyListener seguramente es el hilo principal de toda la aplicación, si detienes ese hilo con un Timer seguramente se va a detener toda la aplicación, por lo menos todo lo que esté corriendo sobre el EventDispatchThread. Y al finalizar la espera la tecla va a estar en la cola del teclado.
Normalmente, a mi conocimiento, se utiliza el intervalo de tiempo transcurrido para saber si se debe consumir el evento del teclado. Eso permite que otros eventos sigan ocurriendo, ya sea del teclado o de otro dispositivo.
Por ejemplo:
Código Java:
Ver originalprivate long lasttimeout
= System.
currentTimeMillis(); private long timeout = 0;
jTextField1.
addKeyListener(new java.
awt.
event.
KeyAdapter() { @Override
public void keyTyped
(java.
awt.
event.
KeyEvent evt
) { if (System.
currentTimeMillis() - lasttimeout
< timeout
* 10) { evt.consume();
} else {
// doSomething()
lasttimeout
= System.
currentTimeMillis(); }
}
});
Dependiendo del valor de la variable timeout, el tiempo en que se va a consumir un evento (y por consiguiente se va a dejar de procesar), va a ser mayor o menor. Si tuvieras un Slider podrías cambiar el valor para probar la diferencia. O puedes cambiar el valor de timeout manualmente antes de ejecutar la aplicación.
Código Java:
Ver original @Override
public void stateChanged
(javax.
swing.
event.
ChangeEvent evt
) { if (evt.
getSource() instanceof JSlider) { if (!slider.getValueIsAdjusting()) {
timeout = slider.getValue();
}
}
}
});
Saludos,
ps:
En el caso del evento
keyTyped solamente funciona con las teclas simples, es decir, el Alt+F4 va a seguir funcionando independientemente de la espera aunque tenga un timeout muy alto, para evitar eso tendrías que sobrecargar el método
keyPressed también.