Reihenfolge von ActionListener und InputVerifier

Status
Nicht offen für weitere Antworten.

Andreas29

Bekanntes Mitglied
Hi Leute,

ich habe eine GUI (auf Swing-Basis), die unter anderem ein Textfeld und einen Button enthält (neben zahlreichen anderen Komponenten, die für die Frage aber uninteressant sind). Auf dem Textfeld habe ich einen InputVerifier und auf dem Button einen ActionListener. Jetzt habe ich folgendes Problem:
Wenn das Textfeld den Fokus hat und ich dann mit der Maus auf den Button klicke, verliert ja logischerweise das Textfeld den Fokus und der InputVerifier wird aufgerufen. Gleichzeitig wird aber auch der ActionListener von dem Button aufgerufen. Das Problem ist, dass ich irgendwie sicherstellen muss, dass der ActionListener vor dem InputVerifier aufgerufen werden muss, weil der ActionListener den für den InputVerifier richtigen Wert in das Textfeld schreibt. In 80% der Fälle scheint dem auch so zu sein, nur gibt es dazwischen immer wieder aussetzer, in denen das nicht so ist. Leider kann ich das ganze auch nicht über wait-notify synchronisieren, weil sowohl der ActionListener als auch der InputVerifier im EventDispatchThread läuft, sprich nacheinander abgearbeitet werden. Hat wer eine Idee, wie ich das Problem lösen kann?

Grüße und vielen Dank für jede Hilfe,
Andreas
 
Besonders elegant ist das vielleicht nicht, aber du könntest ein flag einrichten, das angibt, ob der actionlistener schon aufgerufen wurde. falls nicht, tut der Inputverifier nichts und setzt ein anderes flag, das angibt, dass der verifier noch ausgeührt werden muss. das kannst du dann in diesem fall aus dem actionlistener per hand machen, nachdem der alles wichtige abgearbeitet hat.
 
Hallo.
Probier mal, ob
Code:
button.setVerifyInputWhenFocusTarget(false);
bei dir was bringt. So wie ich's verstehe heißt das: Wenn dieser Button den Fokus bekommt, wird kein InputVerifier aufgerufen. Damit könntest du dann in der
Code:
actionPerformed()
deinen Feldwert setzen und dem Feld wieder den Fokus geben.
Ich hoffe ich hab dein Vorhaben so richtig verstanden 😉

Ansonsten wird es eher kompliziert, InputVerifier und ActionListener in eine feste Reihenfolge zu bringen.
 
Hallo,
probier mal
Java:
SwingUtilities.invokeLater(...)
in deinem Verifier. Damit kannst du erreichen erst am ende der Eventverarbeitung loszulegen...
Ciao velaluka
 
Hi,

erstmal entschuldigung, dass ich erst jetzt antworte, aber in letzter Zeit war einfach zuviel los...

Mittlerweile habe ich selbst eine Lösung gefunden und etwas dazugelernt. Wie mir inzwischen klar wurde, war der Fehler der, dass der InputVerifier mein Modell geändert hat. Nachdem ich das abgestellt habe, war das Problem gelöst. Ich habe also gelernt, dass der verifier nur das tun soll, was er tun soll, nämlich die Eingabe zu Verifizieren. Und dazu braucht er nicht in mein Modell schreiben.

Vielen Dank für jede Hilfe und euch allen ein wunderwunderschönes Wochenende,
Andreas
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben