Cómo detener los eventos repetidos de keyPressed () / keyReleased () en Swing

Entonces, el problema que estoy teniendo parece ser un error que ocurre solo en Linux. Intento que mi aplicación swing se grabe cuando se presiona una tecla, luego para detectar cuándo se suelta esa tecla. Ahora eso no debería estar en cuestión porque se supone que KeyListener manejará esto por mí.

El problema es que cuando mantengo presionada la tecla obtengo muchos eventos repetidos por keyPressed () / keyReleased () en lugar de solo pulsar una tecla (). ¿Alguien tiene una solución o solución para saber cuándo una clave realmente se lanzó en Linux?

Gracias.

Entonces, el problema que estoy teniendo parece ser un error que ocurre solo en Linux

Sí, este es un problema de Linux.

En Windows, cuando se mantiene presionada una tecla, se obtienen múltiples eventos KeyPressed pero solo un evento KeyReleased.

Esta pregunta se hace a menudo y nunca he visto una buena solución.

Pero creo que la base de una solución es usar un temporizador. Cuando se presiona la tecla, comienza un temporizador. Cuando obtiene otra tecla presionada, reinicia el temporizador. Por lo tanto, siempre que el intervalo del temporizador sea mayor que la velocidad de repetición de la placa de teclas, el temporizador se reiniciará continuamente cuando se mantenga presionada una tecla. Cuando keyPresses deja de generarse, el temporizador se disparará, por lo que supone que la clave se ha liberado. Esto implica que tendrá un retraso en el procesamiento de la clave liberada.

Esta pregunta está duplicada aquí .

Aquí hay un truco implementado como AWTEventListener que se puede instalar al inicio de la aplicación.

Aquí está el error de Sun (incluye ejemplos de soluciones alternativas): http://bugs.sun.com/view_bug.do?bug_id=4153069

Puede encontrar una buena solución aquí .

Use la implementación de KeyEventDispatcher, con ella hará que las claves se vinculen correctamente.

Intereting Posts