# Fenster mit dem x-Button schließen



## HakBak (11. Mrz 2005)

Hi, 
besteht irgendwie die Möglichleit, den x-Knopf oben rechts in der ecke anzusprechen. 
Ich möchte halt, dass vorher gespeichert wird, bzw., dass eine Abfrag kommt, wenn man den knopf betätigt, aber ich habe bisher noch nichts gefunden. 
Danke.


----------



## Roar (11. Mrz 2005)

HakBak hat gesagt.:
			
		

> Ich möchte halt, dass vorher gespeichert wird, bzw., dass eine Abfrag kommt, wenn man den knopf betätigt, aber ich habe bisher noch nichts gefunden.



benutz die suchfunktion.  und guck hier: http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Window.html#addWindowListener(java.awt.event.WindowListener)


----------



## L-ectron-X (11. Mrz 2005)

So etwa:

```
private boolean isModified = false;
...

  // im Konstruktor der Fensterklasse
  addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
      exit();
    }
  });
...
...
...

/**Methode zum Beenden des Programms*/
private void exit() {
  if(isModified)) { //wenn Daten geändert wurden
    int answer = -1;
    answer = javax.swing.JOptionPane.showConfirmDialog(null, "Es wurden Daten geändert.\nSollen die Änderungen gespeichert werden?",
    "Ändern von Daten bestätigen", javax.swing.JOptionPane.YES_N_OPTION);

    switch(answer) {
      case 0: //YES_OPTION
      //speichern der Daten
    }
  }
  System.exit(0);
}
```


----------



## HakBak (12. Mrz 2005)

ok, danke, also das mit dem fensterschließen hat schon wunderbar funktioniert. 
nun aber, ich überprüfe ich ob sich die daten geändert haben. Ich speicher meine daten in einem treemap. Mir feht da gerade ein wenig die idee dafür.

Hab doch noch ein problem gefunden und zwar schließt das Drücken des x-Buttons das Programm, obwohl er das garnicht tun sollte, hier ist mal der code, vielleicht findet wer was 


```
this.addWindowListener(new java.awt.event.WindowAdapter() { 
			public void windowClosing(java.awt.event.WindowEvent e) {    
				int speichernFrage = JOptionPane.showConfirmDialog(desktop, "Sollen die Daten gespeichert werden?",
						"Frage", JOptionPane.YES_NO_OPTION);
				if(speichernFrage == JOptionPane.YES_OPTION)
				{
					speichern();
					int beendenFrage = JOptionPane.showConfirmDialog(desktop, "Soll das Programm jetzt beendet werden?", 
							"Frage", JOptionPane.YES_NO_OPTION);
					if(beendenFrage == JOptionPane.YES_OPTION)
					{
						System.exit(0);
					}
					else
					{
						return;
					}
				}
				else
				{
					int beendenFrage = JOptionPane.showConfirmDialog(desktop, "Soll das Programm jetzt beendet werden?", 
							"Frage", JOptionPane.YES_NO_OPTION);
					if(beendenFrage == JOptionPane.YES_OPTION)
					{
						System.exit(0);
					}
				else
				{
					return;
				}
				}
				
			}
		});
```

Danke


----------



## mr1st (12. Mrz 2005)

```
setDefaultCloseOperation(WindowConstats.DO_NOTHING_ON_CLOSE);
```
Natürlich außerhalb des WindowListeners.

MfG


----------



## L-ectron-X (12. Mrz 2005)

HakBak hat gesagt.:
			
		

> nun aber, ich überprüfe ich ob sich die daten geändert haben. Ich speicher meine daten in einem treemap. Mir feht da gerade ein wenig die idee dafür.


Du solltest auf jeden Fall, sofern noch nicht geschehen, die Daten innerhalb einer Methode in die TreeMap speichern.
Am Ende setzt Du einfach die Instanzvariable _isModified_ vom Typ boolean aus meinem Code auf true.
Diese Variable kannst Du dann innerhalb Deiner if-Bedingung auswerten.

Um das Schließen des Fensters nur noch dem WindowListener zu überlassen schreibst Du noch innerhalb des Konstruktors der Fensterklasse:

```
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
```


----------

