So beenden Sie die wiederholte keyPressed() / keyReleased () - Ereignisse in Swing
Also das problem was ich habe scheint ein Fehler zu sein, der tritt nur auf Linux. Ich bin versucht zu haben, meine swing-app aufnehmen, wenn eine Taste gedrückt ist, dann zu erkennen, wenn die Taste losgelassen wird. Nun, dass sollte nicht in Frage, weil KeyListener soll, um diese zu bewältigen für mich.
Das problem ist, dass wenn ich eine Taste gedrückt halten, bekomme ich viel wiederholt keyPressed()/keyReleased () - Ereignisse, statt nur die einzelnen keypressed(). Hat jemand eine Lösung oder einen workaround zu wissen, wenn eine Taste wirklich losgelassen auf linux?
Danke.
InformationsquelleAutor Sandro | 2009-11-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, das ist ein Linux problem.
Unter Windows, wenn eine Taste gedrückt gehalten, Sie bekommen mehrere KeyPressed-events, aber nur eine einzige KeyReleased-Ereignis.
Wird diese Frage oft und ich habe nie gesehen, eine gute Lösung.
Aber ich denke, dass die Grundlage für eine Lösung ist, einen Timer zu verwenden. Wenn die Taste gedrückt wird, starten Sie einen Timer. Wenn Sie einen anderen keyPressed Sie den Timer neu starten. So lange die Timer-Intervall größer ist als die Wiederholungsrate der Tastatur wird der Timer kontinuierlich zurückgesetzt, wenn eine Taste gedrückt wird. Wenn die stop-Taste gedrückt wird, generiert der Timer ausgelöst wird, so vermuten Sie die-Taste freigegeben wurde. Dies bedeutet, Sie haben eine Verzögerung bei der Bearbeitung der keyReleased.
InformationsquelleAutor camickr
Diese Frage wird dupliziert hier.
Hier ist ein hack umgesetzt als ein AWTEventListener, die installiert werden können zu Beginn der Anwendung.
InformationsquelleAutor stolsvik
Hier ist der bug von Sun (enthält Beispiele für umgehungslösungen): http://bugs.sun.com/view_bug.do?bug_id=4153069
InformationsquelleAutor Piotrek
Finden Sie eine ziemlich gute Abhilfe hier.
+1 Für nützliches Beispiel und Bindeglied. Danke!
Link ist wieder tot. Wayback machine: web.archive.org/web/20151114111041/http://brunez.net63.net/...
InformationsquelleAutor broncoAbierto
Verwenden Sie die KeyEventDispatcher Umsetzung, mit ihm werden Sie machen Schlüssel bindet korrekt.
InformationsquelleAutor Jonathan Costa