-
Abfangen von TastaturEingaben
hallo zusammen
Arbeite gerade an einer Modellbahnsteuerung in Java/Swing.
Jetzt moechte ich mit jeweils 3 auf dem Keyboard untereinanderliegende Tasten dazu verwenden um die Geschwindigkeit der Loks zu steuern und das zwar egal welche Komponente des GUI's den Focus hat.
Und zwar soll das so gehen: wenn ich einmal z.B. 'q' druecke erhoeht sich die Geschwindigkeit um 10 KM/h wenn ich 'q' laenger als eine Sekunde druecke geht die Geschwindigkeit mit jeder weiteren Sekunde um 50 KM/h hoch.
Die KeyBindings haben sich als nicht brauchbar herausgestellt, da sie solange die Taste gedrueckt ist wie bloede Events generiert.
Mit dem KeyListener kann ich mich nur auf einem JComponent registrieren ich moechte aber die Events kriegen egal welche Komponente des GUI's den Focus hat. Eine Loesung waere ja schon, dass ich den KeyListener auf jeder Komponente registriere aber es muss doch auch einfacher gehen.
kann mir da jemand behilflich sein ??
danke !
-
Registrierter Benutzer
Keylistener aufs JFrame?
MfG Bischi
"There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams
--> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...
-
Geht nicht.
Auf dem JFrame erhalte ich keine Events, da es wahrscheinlich nicht fokusierbar ist.
-
Hmm..
Müsste eigentlich schon gehen, bin mir aber nicht sicher inwieweit sich das JFrame selbst den Focus hohlt.
Könntest du mal JFrame.requestFocus() versuchen?
Geändert von Lin728 (21-08-2017 um 15:00 Uhr)
-
Hi
Das mit requestFocus() funktioniert schon, aber sobald man eine Komponente anklickt verliert das JFrame den Focus und es funktioniert nicht mehr.
gruss ben
-
Registrierter Benutzer
Also auf das Frame nen Focus-Listener und falls Fokus verloren geht, Fokus beanspruchen...
MfG Bischi
"There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams
--> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...
-
naja auch nicht unbedingt praktikabel, da ich nun keine JComboBoxes mehr oeffnen kann, da das JFrame sofort wieder den Focus holen geht :-(
-
Hat keiner noch eine Idee auf Lager ?
Mit den Key-Bindings wuerde es super gehen, wenn die nur nicht immer Events generieren wuerden waehrend ich die Taste gedrueckt halte.
Es kommt immer
keyPressed
keyReleased
keyPressed
...
obwohl ich die Taste nie losgelassen habe
-
frag doch im 1. pressed die zeit ab.
dann fragst du bei jedem released wieder die zeit ab und vergleichst sie
wenn sie groß genug ist -> aktion ausführen (+50km/h) und zeit wieder löschen (auf null setzen, damit das nächste pressed wieder weiß dass es speichern muss)
nicht schön, aber sollte besser gehen als ne requestFocus()-kampf :P
-
Registrierter Benutzer
Zum Focusproblem: Was hindert dich eigentlich daran, eine Listener-Klasse zu schreiben, die du bei allen Elementen registrierst, bei denen du die Tastatureingabe abfangen willst? Bei der Kombobox z.B. wirst du die Tastatureingabe nicht anderweitig verwenden, also darf der Fokus ruhig drauf sein.
Zum dauernden Event auslösen bei gedrückter Taste: Ja, es wird immer wieder ausgelöst. Vom System. Und wenn du die Länge des Tastenhaltens auswerten willst, brauchst du das sogar.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen