Foros del Web » Programación para mayores de 30 ;) » Java »

KeyListener y timers

Estas en el tema de KeyListener y timers en el foro de Java en Foros del Web. Buenas!! Tengo un KeyListener , con un switch dentro, el cual mira la tecla que le a dado y ejecuta X acción. Lo que quiero ...
  #1 (permalink)  
Antiguo 21/06/2011, 05:33
 
Fecha de Ingreso: enero-2009
Mensajes: 119
Antigüedad: 15 años, 4 meses
Puntos: 1
KeyListener y timers

Buenas!!

Tengo un KeyListener, con un switch dentro, el cual mira la tecla que le a dado y ejecuta X acción.

Lo que quiero hacer, por ejemplo, si dejas pulsada la tecla, no para de repetir esa acción a una gran velocidad, yo quiero ponerle un pequeño timer, que cuando ejecute una tecla, se pare, y aunque tengas la tecla pulsada hasta que no acabe este timer, no haga nada, como sino estuviera tocando ninguna tecla.

He probado parando el thread, con WAIT, y sleep. Pero no consigo lo que quiero, de esta forma lo que me pasa es como "que me lo deja en cola" realmente no lo paro.

¿Alguna forma de deshabilitar en keylistener, durante X tiempo? O algo similar.

Gracias a todos!
__________________
http://www.isosps3.com/ - Tu web de de PS3, aquí puedes encontrar desde información hasta backups!
  #2 (permalink)  
Antiguo 21/06/2011, 21:12
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 4 meses
Puntos: 260
Sonrisa Respuesta: KeyListener y timers

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 original
  1. private long lasttimeout = System.currentTimeMillis();
  2.     private long timeout = 0;
  3.  
  4.     jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
  5.         @Override
  6.         public void keyTyped(java.awt.event.KeyEvent evt) {
  7.             if (System.currentTimeMillis() - lasttimeout < timeout * 10) {
  8.                 evt.consume();
  9.             } else {
  10.                 // doSomething()
  11.                 lasttimeout = System.currentTimeMillis();
  12.             }
  13.         }
  14.     });
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
  1. jSlider1.addChangeListener(new javax.swing.event.ChangeListener() {
  2.         @Override
  3.         public void stateChanged(javax.swing.event.ChangeEvent evt) {
  4.             if (evt.getSource() instanceof JSlider) {
  5.                 JSlider slider = ((JSlider) evt.getSource());
  6.                 if (!slider.getValueIsAdjusting()) {
  7.                     timeout = slider.getValue();
  8.                 }
  9.             }
  10.         }
  11.     });
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.
  #3 (permalink)  
Antiguo 23/06/2011, 07:59
 
Fecha de Ingreso: enero-2009
Mensajes: 119
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: KeyListener y timers

Perdona por no haberte contestado antes HackmanC, una vez mas gracias, no habia caido en el metodo consume, ya lo habia usado anteriormente!

Funciona a la perfección ademas es una forma muy limpia de pararlo!

Gracias de nuevo! Una vez mas ^^
__________________
http://www.isosps3.com/ - Tu web de de PS3, aquí puedes encontrar desde información hasta backups!
  #4 (permalink)  
Antiguo 23/06/2011, 19:41
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 4 meses
Puntos: 260
Sonrisa Respuesta: KeyListener y timers

Hola GENESISBM,

Cita:
Iniciado por GENESISBM Ver Mensaje
... es una forma muy limpia de pararlo! ...
De nada, y que bueno que te haya servido en algo, además me llamó mucho la atención tu comentario. Hay quienes no notan la diferencia, pero desde mi punto de vista los buenos programas normalmente se distinguen por eso, son como el cristal cortado a mano y asemejan una obra de arte, no solo se trata de escribir código, también se trata de que sea bueno.

Saludos,

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:47.