Verständnisfrage EventListener

SamHotte

Top Contributor
Moin Forum,

leider hat mich wiedermal sowohl die Insel als auch Goggle und SuFu im Stich gelassen. Folgende Frage stellt sich mir:

Ich habe eine Oberfläche mit sehr vielen editierbaren Components (JTextBox, JCheckBox, JRadioButton). Den gesamten Datensatz möchte ich nur speichern, wenn ich etwas verändert habe, daher habe ich dem Frame ein "Dirty-Flag" spendiert, das ich über ActionListener bzw. KeyListener setze. Da ich dieses Flag nicht wieder auf false setze, wenn mal was geändert wurde (sonst müsste ich ja einen "rückgängig"-Speicher haben), dachte ich, dass mit einem Singleton-Listener auskäme, den ich an alle Components hinzufüge.

Das klappt aber nicht, es funktioniert nur, wenn ich jeweils ein "add(new xxxListener())" mache. Meine Frage ist nun: warum? Kann mir das einer erklären?

Gruß
SamHotte
 
V

vanny

Gast
Hmm,

dein Konzept leuchtet mir leider noch nicht so ganz ein.
Also entweder oder würd ich mal sagen.
Entweder:
Du fragst die Änderungen direkt an deinen Komponenten ab, was bedeutet die benötigen auch alle den passenden xxxListener.

Oder:
Du nimmst einen Button, und löst den Vergleich in der actionPerformed().

Aber:
Gib mir mal eben den Flagstatus ohne irgendwas stelle ich mir etwas zu simpel gedacht vor.
Das lässt sich maximal über einen zeitgesteuerten Abgleich vorstellen.
Ich lasse mich aber gerne eines Besseren belehren.

Gruß Vanny
 

SamHotte

Top Contributor
Okay, ich hab's vielleicht nicht gut genug erklärt. Ich möchte ein boolean-Feld des Frames auf true setzen, sobald in irgend einem editierbaren Element etwas verändert wurde. Daher habe ich einen ActionListener (für Checkboxen und Radiobuttons) und einen KeyListener (für die Textfelder) gebaut, den ich bei jedem einzelnen Element hinzufüge.

Die Frage jetzt ist: warum muss ich pro Textbox, Checkbox etc. eine neue Instanz dieses Listeners hinzufügen, warum reicht es nicht, genau eine Instanz davon zu erzeugen und diese zu teilen?
 

bERt0r

Top Contributor
Du kannst einem Textfeld keinen ActionListener zuweisen, weil ein Textfeld keine "Actions" macht, die machen nur buttons.

Was du allerdings machen kannst, ist dir einen "Generallistener" basteln, also eine eigene Klasse, die alle Listener Interfaces die du haben willst implementiert. Davon erzeugst du dann ein Objekt, das kannst du jedem deinem GUI-Elemente anhängen. Mit Singleton hat das aber nix am Hut.

Was ich aber trotzdem nicht verstehe: Normalerweise sollte ein Datensatz in der DB nur dann geändert werden, wenn ich als Benutzer auch auf irgendeinen Ok/Speichern Button klicke.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Man braucht nicht eine Instanz pro GUI-Component, sondern nur eine Instanz pro Listener-Typ. Also EINEN ActionListener, EINEN DocumentListener ...

Insgesamt klingt das aber ohnehin ziemlich fragwürdig. Aber... was soll man machen....
 

SamHotte

Top Contributor
Habe ich ja uch so geschrieben (#3): KeyListener für Textfelder ;-)
Aber egal. Mir geht es nicht um den "richtigen" oder "falschen" Listener, das funzt schon so. Aber momentan erzeuge ich bei jedem Textfeld mittels "new" eine neue Listener-Instanz, was aus meiner Sicht unnötig sein müsste, da dieser Listener nur ein statisches Feld des Frames verändert. Eigentlich sollte genau eine Listener-Instanz ausreichen - dachte ich. Funktionierte aber nicht. Jetzt interessiert mich halt, warum das nicht funktioniert.
 

SamHotte

Top Contributor
Man braucht nicht eine Instanz pro GUI-Component, sondern nur eine Instanz pro Listener-Typ. Also EINEN ActionListener, EINEN DocumentListener ...

Insgesamt klingt das aber ohnehin ziemlich fragwürdig. Aber... was soll man machen....

Also statt singleton das Ding einmal im Frame instanziiren und dann jeweils hinzufügen? Muss ich gleich mal probieren ...

/edit: Danke, Marco13 - das war der goldene Tipp gegen meinen Denkfehler :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JavaFX Verständnisfrage mit parametrisierten Methoden und FXML AWT, Swing, JavaFX & SWT 21
B JavaFX Verständnisfrage EventHandler<ActionEvent> Implementierung in meiner Klasse AWT, Swing, JavaFX & SWT 2
B JavaFX Grundlegende Verständnisfrage JavaFX<->Scene Builder AWT, Swing, JavaFX & SWT 12
L JavaFX Verständnisfrage zu JavaFX FXML und Controller-Klasse AWT, Swing, JavaFX & SWT 1
M Swing JButton-Konstruktor Icon-Parameter (Verständnisfrage) AWT, Swing, JavaFX & SWT 7
S Verständnisfrage anonye Klasse ActionListener AWT, Swing, JavaFX & SWT 4
E EINFACHE Verständnisfrage zu repaint(), paintComponent(), usw. AWT, Swing, JavaFX & SWT 16
hdi Swing Erstmaliges setVisible - Verständnisfrage AWT, Swing, JavaFX & SWT 5
hdi Verständnisfrage: Container vs. Component AWT, Swing, JavaFX & SWT 3
V Verständnisfrage: Welche Positionierungskonstanten? AWT, Swing, JavaFX & SWT 4
V Verständnisfrage Text und anschließende Bildausgabe? AWT, Swing, JavaFX & SWT 6
R Verständnisfrage BufferStrategy: g.dispose() AWT, Swing, JavaFX & SWT 3
K Verständnisfrage zum CellRenderer AWT, Swing, JavaFX & SWT 4
A Verständnisfrage zur Ereignisbehandlung AWT, Swing, JavaFX & SWT 5
B SWT Anonyme Eventlistener wegräumen? AWT, Swing, JavaFX & SWT 4
A EventListener für JFormattedTextField AWT, Swing, JavaFX & SWT 6
B GUI Aktualisierung aus/und eventListener AWT, Swing, JavaFX & SWT 3
D JTabbedPane mit Eventlistener versehen? AWT, Swing, JavaFX & SWT 9
O EventListener verschachtekt hinzufügen AWT, Swing, JavaFX & SWT 3
multiholle MVC und EventListener AWT, Swing, JavaFX & SWT 4
S Alle EventListener einer JComponent abfragen? AWT, Swing, JavaFX & SWT 3
P EventListener AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben