# Beim schließen --> Speichern??



## Domae (22. Aug 2011)

Hey ihr,
ich hab mal ne Frage zu meinem Programm. Und zwar möchte, dass wenn das Programm beendet wird noch einmal eine Frage zum Speichern kommt. So auf dir Art: "Möchten Sie noch einmal speichern? Ja - Nein."
Ich habe bereits ein wenig rumgeschaut und meine erste Lösung hat so ausgesehen:
Ich habe JFrame.setDefault.CloseOperation(JFrame.DO_NOTHING_ON_CLOSE) gesetzt. Danach wollte ich in der windowEventHandler-klasse das closingEvent abfangen und dann den Auswahl-Dialog reinpacken.


```
public class windowEventHandler extends WindowAdapter {
		public void windowClosing(WindowEvent evt) {
			JOptionPane.showConfirmDialog(frame,
					"Projekt speichern?", "Projekt nicht speichern!", JOptionPane.YES_NO_OPTION);
		}
	}
```

Mir ist klar, dass mit dem Drücken der Buttons noch nichts passiert, jedoch kommt es zu dem Dialog gar nicht. Beim Drücken des X passiert nix!!  Habe ich irgendwas falsch verstanden?

Und könntet ihr mir eventuell einen Tip geben was ich mit den Int-Rückgabe-Werten anfangen soll die durch das Drücken von Yes und No entstehen.
Kann ich dann irgendne if-verzweigung schreiben so z.B. : if(Dialog=1) { ProjektSpeicher();} ? 

Auf eine helfende Antwort würde ich mich sehr freuen.

Liebe Grüße
vom Domae


----------



## AlexSpritze (22. Aug 2011)

Wie sieht der Rest deines JFrame-Codes aus? Registrierst du den WindowAdapter eigentlich?


----------



## Domae (22. Aug 2011)

Oh man... ich volldepp...  ne hab ich noch net gemacht. Sollte ich dann sowas schreiben wie: JFrame.addWindowEventHandler ??

danke für die schnelle Nachricht


----------



## AlexSpritze (22. Aug 2011)

```
javax.swing.JFrame j = ...;
j.addWindowListener(myWindowListener);
```

Sowas kann man schnell mal übersehen, kenn ich


----------



## Domae (22. Aug 2011)

Hey Super!! Der Dialog erscheint. Jedoch bin nun ein wenig überfordert mit der Bearbeitung der Buttons.

Ich weis nicht ob ichs richtig verstanden habe jedoch glaube ich, dass beim Drücken von "YeS" "No" oder "Cancel" Int-Werte entstehen. Doch wie geh ich damit jetzt um?


----------



## AlexSpritze (22. Aug 2011)

Genau, 
	
	
	
	





```
JOptionPane.showConfirmDialog
```
 liefert einen int Wert zurück. So kriegst du raus, was gedrückt wurde:


```
int showConfirmDialog = JOptionPane.showConfirmDialog(...);
    if (showConfirmDialog == JOptionPane.YES_OPTION) {

    } else if (showConfirmDialog == JOptionPane.NO_OPTION) {

    } else if (showConfirmDialog == JOptionPane.CANCEL_OPTION) {
      // do nothing
    }
```

EDIT: Sind in deinem Aufruf "Projekt speichern?" und "Projekt nicht speichern!" richtig gewählt? Laut API steht der erste String für die Nachricht die angezeigt werden soll und der zweite String für die Überschrift des Dialogs.


----------



## Domae (22. Aug 2011)

Ja du hast Recht, das habe ich gerade auch gemerkt! Es funktioniert nun alles so wie ich mir das vorgestellt habe! Vielen Dank nochmal an dich!!

Es bleibt jedoch eine klitze kleine Frage offen! und zwar schreibe ich beim Speichern den Inhalt einer JTable in ein Textfile über einen Writer. Beim Laden liest das Programm die Textdatei aus und füllt die JTable wieder damit.

Nun wäre es echt nice, dass wenn ich das Programm starte, es mir direkt die zuletzt gespeicherte Tabelle wieder anzeigt. Nur habe ich überhaupt keinen Plan wie das gehen soll. Denn ich ich kann ja nirgends angeben wo ich was gespeichert habe oder so...

LG
Domae


----------



## Crian (22. Aug 2011)

Du kannst auch das ganze Objekt serialisieren und wieder einlesen. Also die JTable, falls das komfortabler ist.


----------



## Domae (22. Aug 2011)

Aber das löst doch nicht mein Problem oder? Weis das Programm denn dann wo sich das serialisierte Objekt befindet beim Neustart und kann das Programm es dann ladenn?


----------



## Gast2 (22. Aug 2011)

Domae hat gesagt.:


> Aber das löst doch nicht mein Problem oder? Weis das Programm denn dann wo sich das serialisierte Objekt befindet beim Neustart und kann das Programm es dann ladenn?



Du musst deinem Code natürlich mitteilen wo es speichern und laden soll. Ist der PFad frei wählbar könnte die Preferences API was für dich sein. Dort könntest du dann lediglich den Pfad speichern. 

Diesen dann beim Start auslesen und Datei laden.


----------



## Domae (22. Aug 2011)

Also eigentlich muss ich die Daten ja nicht über die Preferences speichern. Das einzige was ich im Moment will, ist dem Programm zu sagen wo die Datei ist die beim Starten laden muss. Optimal wäre wenn das Programm zum ersten Mal auf einem frischen Pc läuft, man angeben muss wo er die Daten speichern soll. Dieser Pfad wird dann gespeichert und bei jedem Öffnen kommt dann dann ein showOpenDialog, wo der Pfad schon eingespeichert ist.


----------



## Gast2 (22. Aug 2011)

Domae hat gesagt.:


> Also eigentlich muss ich die Daten ja nicht über die Preferences speichern. Das einzige was ich im Moment will, ist dem Programm zu sagen wo die Datei ist die beim Starten laden muss. Optimal wäre wenn das Programm zum ersten Mal auf einem frischen Pc läuft, man angeben muss wo er die Daten speichern soll. Dieser Pfad wird dann gespeichert und bei jedem Öffnen kommt dann dann ein showOpenDialog, wo der Pfad schon eingespeichert ist.



Du sollst ja anicht die Daten mittels Prefences API speichern sondern den letzten Speicherort der Datei!

Diesen dann zum automatischen laden verwenden!

Hatte ja gesagt den Pfad speichern ... nicht Daten ...


----------

