Ungewollt mehrfaches ausführen mouseClicked Event

Hallo,
ich habe eine Anwendung (Adressververwaltung), die aus 2 JFrames besteht (frame1: Suchmaske für Adressen, frame2: Eingabemaske). Die Anw. startet mit frame1 und über einen Button (‚eingabe‘) kommt man zu frame2, wo man Daten eintragen, abspeichern und durch die gespeicherten Daten durchblättern kann (Buttons ‚links‘ und ‚rechts‘); ausserdem gelangt man über einen Button (‚suchen‘) zurück zur Suchmaske. Mein Problem ist nun folgendes:
Nach dem 1. Wechsel (nach dem Start) zur Eingabemaske kann ich noch alle Datensätze einzeln durchblättern. Wechsel ich dann über ‚suche‘ zurück zur Suchmaske und dann wieder zum Eingabeformular, kann ich nur noch in 2er Schritten blättern (die Fkt. links_mouseClicked() wird anscheinend 2x durchlaufen). Wechsel ich jetzt nochmal zwischen den beiden Frames, geht es nur noch in 3er Schritten und so weiter…
Woran kann das liegen? Bekommt der 2. Frame mit jedem Öffnen einen weiteren listener, oder wo liegt mein Problem, und was kann ich dagegen tun?

Hi,

das ist etwas schwer zu sagen ohne den Code zu sehen. Falls du einen guten Editor hast, versuch mal den Code schritt für schritt zu durchlaufen umd den Vorgang nachzuvollziehen oder setzt dir ein paar Breakpoints dort, wo du denkst das der Fehler liegen könnte.

LG Tina

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Tina,
erst mal Danke für Antwort.
Nach der Fehlerquelle brauche ich so wohl nicht zu suchen, da das, was ich vorher gepostet habe, wirklich das Problem zu sein scheint (ich habe in anderen Foren erfahren, dass das mit den zusätzlichen Listenern wohl tatsächlich passieren kann).
Vll. noch eine kurze Info zum Programm:
beim laden des 2. Frames werden alle gespeicherten Daten aus einer Datei gelesen und in eine ArrayList geschrieben. Beim ersten Klick auf ‚links‘ spring ich auf das letzte Feld im Array und lasse die Daten Anzeigen. Bei jedem weiteren Klick wird der Index dekrementiert und dann der Inhalt im Array an Stelle des neuen Indizes ausgegeben. Zum testen lasse ich jetzt auch jedesmal den Index ausgeben (EINE! System.out-Ausgabe). Wenn ich jetzt zw. den Frames wechsel, bekomme ich nach dem 1.Wechsel 2 Ausgaben, nach dem 2. 3 Ausgaben usw.

P.S. beim Wechsel wird der AUFRUFENDE Frame mit this.dispose(); geschlossen und der AUFGERUFENE Frame sollte(!) eigentlich komplett neu geladen werden…wird vll. bei dispose() nicht alles „de-initialisiert“?

Gruß,
Zaphod_B

P.S. beim Wechsel wird der AUFRUFENDE Frame mit
this.dispose(); geschlossen und der AUFGERUFENE Frame
sollte(!) eigentlich komplett neu geladen werden…wird vll.
bei dispose() nicht alles „de-initialisiert“?

Nein, einen Destruktor gibts in Java nicht. Damit bleibt die Instanz des Fensters erhalten (und mit ihr alle Listener). Nun wäre die Frage wie erzeugst du das Fenster neu (Beispielcode).

Eine andere Variante wäre vor dem addMouseListener( ein removeMouseListener zu setzen. Damit ist der weg (wenn keiner drauf ist gibts auch keine Fehlermeldung)

Aber wie gesagt, ein wenig Beispielcode… hilft Wunder (meist)

Michael

Hi!

P.S. beim Wechsel wird der AUFRUFENDE Frame mit
this.dispose(); geschlossen und der AUFGERUFENE Frame
sollte(!) eigentlich komplett neu geladen werden…wird vll.
bei dispose() nicht alles „de-initialisiert“?

Nein, einen Destruktor gibts in Java nicht. Damit bleibt die
Instanz des Fensters erhalten (und mit ihr alle Listener). Nun
wäre die Frage wie erzeugst du das Fenster neu (Beispielcode).

Eine andere Variante wäre vor dem addMouseListener( ein
removeMouseListener zu setzen. Damit ist der weg (wenn keiner
drauf ist gibts auch keine Fehlermeldung)

Aber wie gesagt, ein wenig Beispielcode… hilft Wunder
(meist)

(ich misch mich mal kurz ein)

könnte es sein, daß du die klasse ständig neu initialisierst und so bei jeder aktion einen neue instanz kreierst?

grüße,
tomh

Hi,
erstmal Danke an alle.
Ich habe mal die Variante mit dem ‚removeMouseListener()‘ probiert - also jedesmal, wenn ich von frame2 nach frame1 wechsel, werden die betroffenen Listener removed, und beim umgekehrten Wechsel geadded - das scheint so mal wunderbar zu funktionieren. Ist vll. nicht die sauberste Lösung, aber für meine Zwecke völlig ausreichend…und den ganzen Code zu posten, um darin nach möglichen Ursachen zu suchen, wäre wohl etwas übertrieben.

Also, nochmals Danke für die Tipps.