# Prüfen, ob in einem Textfeld/Tabelle eine Eingabe erfolgt is



## McCormick (15. Okt 2008)

Gibt es irgendeine Möglichkeit, zu überprüfen, ob in einem Textfeld eine Eingabe gemacht wurde?

Ich möchte nämlich, falls eine Eingabe gemacht wurde, einen boolean Wert setzen, damit vor Schließen des Programms noch eine Meldung kommt (je nachdem ob eine getätigte Eingabe gespeichert wurde, oder nicht).


----------



## Templon (15. Okt 2008)

http://java.sun.com/docs/books/tutorial/uiswing/events/documentlistener.html


----------



## Templon (15. Okt 2008)

Sry für Doppelpost, aber vorhin kam irgendein Fehler...


----------



## McCormick (15. Okt 2008)

Kein Ding, doppelt hält besser ;-)

Das sieht ja schonmal nach dem aus, was ich suche. Allerdings scheint sich in dem Artikel nichts auf eine JTable zu beziehen. Kann ich dieses Gebilde auch für meine Tabelle benutzen, also auch wenn in meiner JTable etwas eingegeben wurde?


----------



## Templon (15. Okt 2008)

Wolltest du es nicht für ein Textfeld? =)


----------



## McCormick (15. Okt 2008)

Sorry, ja, anfangs schon ;-)

Hatte es leider verbockt, auch noch die Tabelle zu erwähnen, sorry


----------



## Michael... (15. Okt 2008)

Änderungen im JTable werden über TableModelListener getriggert


----------



## Guest (15. Okt 2008)

Wenn ich da allerdings mein TableModel angebe, triggert er ja alles, was die Tabelle betrifft.

Ich möchte einfach nur abfangen, wenn ein User etwas in ein Tabellenfeld eingetippt hat. Bei dem Trigger, den ich hier habe, schlägt er nämlich auch schon Alarm, wenn ich die Tabelle am Start automatisch befülle (was ja auch logisch ist, ich kann es allerdings nicht brauchen so)


----------



## Guest (15. Okt 2008)

Du wirst nicht umhin kommen, die Swing-Beans zu erweitern (out-of-the-box sind die eh zu nix
Ernsthaftem zu gebrauchen...). Du brauchst folgende "Features":
- irgendeine Art von "Binding"
- Deine Beans muessen sich den Zustand der gebundenen Objekte merken koennen (z.B. "saveValue()" oder so). Ziel der Übung: eine Methode a la "isValueChanged()" (d.h. weicht der Wert/Repräsentation des aktuellen Objekts vom "gesicherten" ab?)
- Container sind ebenfalls zu erweitern, damit man sie befragen kann, ob irgendeine Component Änderungen aufweist
- mittels DocumentListener "feuern" dann die Components "nach oben", sobald der Benutzer was ändert.
  Ich mache das (bei Textfields) am ersten Keystroke fest (danach nicht mehr wg. Performance) und pruefe dann nochmal,
  ob sich tatsaechlich was geaendert hat nach FocusLost.
- Deine Applikation laeuft dann so:
  1. Panel/Frame/Dialog anzeigen mit vorbelegten Werten (z.B. aus  einer DB).
  2. saveValues() aufrufen (Methode im Container geht rekursiv durch alle Components und Container
     und ruft dort saveValue() auf).
  3. Benutzer bearbeitet die Daten
  4. Will er das Window schliessen, prueft die Applikation ob <TopLevelContainer>."areValuesChanged()" (oder wie auch immer Deine Methode heisst) und wenn ja, gibt's die beruehmte Frage "cancel, save or discard?").
Wenn Du es richtig gut machen willst, spendierst Du Deinen Containern noch EventListeners, damit die Applikation z.B. einen Butten enabled/disablen kann, sobald der Benutzer was ändert. Dann sieht er auch gleich, was los ist.

Nicht in 5 Minuten zu machen, aber lohnt sich.


----------



## Guest (15. Okt 2008)

Oh je, dann fürchte ich, werde ich dieses Thema ad acta legen müssen, da ich mich dafür einfach nicht ´zu sehr in Java auskenne - mein Wissen ist eher von oberflächlicher Natur...
Trotzdem danke für die Hinweise - sollte sich mein Wissen mal erweitern, werdeich das mal ausprobieren.


----------



## Michael... (15. Okt 2008)

Anonymous hat gesagt.:
			
		

> Wenn ich da allerdings mein TableModel angebe, triggert er ja alles, was die Tabelle betrifft.


Man könnte sich das TableModelEvent mal genauer anschauen, z.B. liefert TableModelEvent.getColumn() beim befüllen von Tabellen -1, während wenn der User konkret in einer Zelle etwas geändert hat liefert die Methode die entsprechende Spalte. Falls sowohl User als auch System einzelne Zellen bearbeiten könnte man noch zusätzlich mit einem Flag arbeiten.


----------



## McCormick (16. Okt 2008)

Guten Morgen,

cool Michael. Das ist doch schonmal sehr gut 

Damit kann ich etwas anfangen. Werde mir da mal eine Lösung überlegen. Vielen Dank


----------

