Unterschied Windowclosed / WindowClosing

paule7

Mitglied
Hallo,

was ist eigentlich der Unterschied zwischen WIndowClosed und WindowClosing? Warum verwende ich bei den einen dispose() und für was steht es eigentlich?
 
windowClosing gibt dir bescheid dass der user auf das X geklickt hat. Da könntest du dann z.b. noch einen dialog aufpoppen lassen ob der user wirklich beenden will. windowClosed wird aufgerufen, wenn dispose auf dem fenster aufgerufen wurde. dort kannst du z.b. aufräumarbeiten durchführen
 
insbesondere ist Closing nur die Reaktion auf den Mausklick auf das X,
wenn man will und alles andere automatische ausgeschaltet hat kann dann auch gar nichts passieren/ das Schließen abbrechen,
etwas nach User-Rückfrage
 
public void windowClosing(WindowEvent)

wird aufgerufen wenn das entsprechende source-window geschlossen werden soll ... also in dem moment wenn du auf das X klickst

public void windowClosed(WindowEvent)

wird aufgerufen nach dem das entsprechende source-window geschlossen wurde ... also nach dem alle aufräumarbeiten wie setVisible(false) oder de-register vom OS vollzogen sind

java.awt.Window.dispose()

hat zwei aufgaben

1) das fenster "verstecken" ... hierzu wird intern einfach setVisible(false) aufgerufen
2) alle referenzen , resourcen und listener de-registrieren und aufräumen ... nötig um z.b. ein window auch wirklich "zu schließen" ... und nicht "unsichtbar zu machen" ...

genaueres findest du in der API-Doc
 
Zu windowClosed fällt mir nichts sinnvolles ein, aber zu windowClosing.

Du möchtest, dass bestimmte Daten, wie die Fenstergröße oder die Fensterposition oder Daten aus irgendeiner Tabelle in einer Datei/Datenbank, whatever abgespeichert wird, willst es aber nicht während der Laufzeit des Programms machen, da es je nach Datenmenge viel Systemleistung ziehen kann. Daher behälst du die Daten erstmal im Arbeitsspeicher und lässt den User arbeiten. Wenn das Fenster geschlossen wird, also noch NICHT(!) zu ist, sollen die Daten gespeichert werden, damit man sie später, bei einem neuen Programmstart wieder laden kann.
Nun verwendest du die Methode windowClosing, weil diese Methode nur aufgerufen wird, wenn das Fenster geschlossen werden SOLL(!), es aber noch im Arbeitsspeicher und auf dem Bildschirm des Users noch zu sehen ist!

windowClosed ist in diesem Fall schon zu spät, weil alle Daten freigegeben wurden und das Fenster nirgends mehr aufzufinden ist. Weder im Arbeitsspeicher noch auf dem Bildschirm des Users.
 
Lass es mich so erklären:

WindowClosing: Jemand kündigt dir an die Tür vor dir zu zuknallen! Du kannst ihn noch bitten das nicht zu tun!

WindowClosed: Die Tür wurde dir gerade vor der Nase zugeknallt! Ende aus Basta!
 

Zurück
Oben