Anzeige:
Ergebnis 1 bis 10 von 10

Thema: Abfangen von TastaturEingaben

  1. #1
    Registrierter Benutzer
    Registriert seit
    07.01.2002
    Ort
    Hünibach
    Beiträge
    48

    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 !

  2. #2
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    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,...

  3. #3
    Registrierter Benutzer
    Registriert seit
    07.01.2002
    Ort
    Hünibach
    Beiträge
    48
    Geht nicht.

    Auf dem JFrame erhalte ich keine Events, da es wahrscheinlich nicht fokusierbar ist.

  4. #4
    Registrierter Benutzer
    Registriert seit
    17.09.2001
    Beiträge
    1.182

    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 16:00 Uhr)

  5. #5
    Registrierter Benutzer
    Registriert seit
    07.01.2002
    Ort
    Hünibach
    Beiträge
    48
    Hi

    Das mit requestFocus() funktioniert schon, aber sobald man eine Komponente anklickt verliert das JFrame den Focus und es funktioniert nicht mehr.

    gruss ben

  6. #6
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    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,...

  7. #7
    Registrierter Benutzer
    Registriert seit
    07.01.2002
    Ort
    Hünibach
    Beiträge
    48
    naja auch nicht unbedingt praktikabel, da ich nun keine JComboBoxes mehr oeffnen kann, da das JFrame sofort wieder den Focus holen geht :-(

  8. #8
    Registrierter Benutzer
    Registriert seit
    07.01.2002
    Ort
    Hünibach
    Beiträge
    48
    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

  9. #9
    Registrierter Benutzer
    Registriert seit
    26.02.2004
    Ort
    Grefrath
    Beiträge
    28
    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

  10. #10
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    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.
    Das Ziel ist das Ziel.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •