# JFrame per Button schließen



## Squicky (13. Feb 2008)

Hallo

Ich habe Ein Haupt-Frame mit einem Button :JButton JB_add_Daten = new JButton ("Daten hinzufügen") .
Wenn man auf nun auf diesen Button klick, wird eine neues Daten_Frame geöffnet. Das Haupt-Frame bzw. der JB_add_Daten des Haupt-Frame reagiert ob das Daten_Frame geschlossen wird.


```
JButton JB_add_Daten = new JButton ("Daten hinzufügen") 
    JB_add_Daten.setBounds(10, 300, 350, 20);
    JB_add_Daten.setEnabled(false);
    JB_add_DatenaddActionListener
    (
    	new ActionListener() 
    	{
			public void actionPerformed( ActionEvent e ) 
			{
				JF_Daten_Frame Daten_Frame  = new JF_Daten_Frame();
				Daten_Frame.addWindowListener(new WindowAdapter()
				{
	 		    	public void windowClosing(WindowEvent e)
	 		    	{
	 		    		// Hier wird geprüft ob Daten hinzugefügt wurden
	 		    		// Wenn Daten hinzugekommen sind
	 		    		// dann werden diese Daten verarbeitet
                    System.out.println("Daten_Frame  wurde geschlossen");
	 				}
				}
				);
			}	
	);
    add(JB_add_Konto);
```

In diesem neuem Daten_Frame gibt es mehrer JTextField, in die der Benutzer verschiedene Daten eingeben kann. Das Daten_Frame hat auch zwei Button:
JButton JB_add_Daten2 = new JButton ("Daten hinzufügen und speichern")
JButton JB_Abbrechen = new JButton ("Abbrechen und Daten nicht hinzufügen")

Ich suche nun die Funktion/Prozdure, die ganz am Ende vom JButton JB_add_Daten bzw. im JB-Abbrechen stehen muss, damit das Daten_Frame geschlossen wird und der Befehler 
	
	
	
	





```
System.out.println("Daten_Frame  wurde geschlossen");
```
 ausgeführt wird.
Danke


P.S: Hier wurde das gleich / ein ähnliches Problem besprochen, leider steht dort keine Lösung:
http://www.java-forum.org/de/topic64055_windowevent-beim-schlie-en-eines-jframe.html


----------



## mimo (13. Feb 2008)

Also, lass uns das Ganze mal zusammenfassen. Du willst aus einem ersten Frame ein Frame für die Dateneingabe öffnen und das erste dann verschwinden lassen. Unsichtbar machen kannst du das einfach in dem Du setVisible(false) aufrufst, das Frame ganz zerstören mit dispose(). Das funktioniert bei jedem Frame. Allerdings solltest du aufpassen, dass Du bei dispose() nicht auch Dein zweites Frame zerstörst, falls du keine Referenz mehr darauf hältst.

Ich würde dir raten beim Button Dateneingeben im ersten Frame setVisible(false) zu setzten und das zweite Frame zu laden. Wenn Du dann das andere mit dispose beendest, einfach wieder setVisible(true) auf dem ersten Frame setzten damit es wieder sichtbar wird. Eine elegantere Möglichkeit ist es mit Dialog zu arbeiten wodurch das erste Frame erst wieder aktiv wird wenn der Dialog geschlossen wurde. Ist aber Geschmackssache.

Gruß

MIMO


----------



## Squicky (13. Feb 2008)

mimo hat gesagt.:
			
		

> Also, lass uns das Ganze mal zusammenfassen. Du willst aus einem ersten Frame ein Frame für die Dateneingabe öffnen und das erste dann verschwinden lassen. Unsichtbar machen kannst du das einfach in dem Du setVisible(false) aufrufst, das Frame ganz zerstören mit dispose(). Das funktioniert bei jedem Frame. Allerdings solltest du aufpassen, dass Du bei dispose() nicht auch Dein zweites Frame zerstörst, falls du keine Referenz mehr darauf hältst.
> 
> Ich würde dir raten beim Button Dateneingeben im ersten Frame setVisible(false) zu setzten und das zweite Frame zu laden. Wenn Du dann das andere mit dispose beendest, einfach wieder setVisible(true) auf dem ersten Frame setzten damit es wieder sichtbar wird. Eine elegantere Möglichkeit ist es mit Dialog zu arbeiten wodurch das erste Frame erst wieder aktiv wird wenn der Dialog geschlossen wurde. Ist aber Geschmackssache.
> 
> ...



Du hast es falsch verstanden:

Hier ein einfaches Beispiel:

Man hat ein Haupt_Frame mit einem Button. Wenn man diesen Button anklickt, soll ein zweites Frame geöffnet werden. Dieses zweite Frame soll einen "abbrechen Button" haben. Wenn man das zweite Frame schließt (oben rechts auf X klicken) oder den "abbrechen Button" klicken, dann soll das Haupt_Frame darauf reakieren und z.B. die Hintergrundfarbe des Haupt_frame ändern.


----------



## mimo (13. Feb 2008)

Naja ok, aber trotzdem regelt man so was über ein JDialog, welches Dein Hauptframe einfriert wärend du deine Parameter eingibst. Bei drücken von X im Rahmen wäre es dann so als hättest du es nicht geöffnet. Wenn Button Abbrechen betätigst einfach this.dispose(). Dialog wird geschlossen. 
Da du dem Konstruktor sowieso eine Referenz auf dein Frame mitgibst, kannst du ganz einfach die Methode zum setzen der neuen Werte im Frame aufrufen und dann das JDialog mit dispose() schließen.


----------

