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.