# Nur einen JFrame schliessen oder Objekt zerstören



## Marshallbbw (11. April 2006)

Hallo Leute, 

ich möchte gerne ein Frame schliessen ohne gleich das ganze system zu beenden. Habe schon versucht dispose() zu nutzen in der Hoffnung, dass das Frameobjekt zerstört wird oder so. Klappt aber nicht. Hier mal ein Beispiel bei dem subFrame geschlossen werden soll aber mainFrame eben nicht (ist nur ein vereinfachtest Bsp.). Wenn man mit dispose() arbeitet und vorher im Textfeld was eingibt dann wird das wieder angezeigt wenn man nochmal ein subFrame anzeigen will. Problem ist nur dass ich nicht jedesmal beim Klick ein neues JFrame-Objekt erstellen will und kann - also sollte das Attribut private static JFrame subFrame = new JFrame(); schon deklariert bleiben. Ich hoffe ihr habt mich verstanden


```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextField;

public class CloseDemo 
{
  private static JFrame subFrame = new JFrame();	
	
  public static void main(String[] args) 
  {
    JFrame mainFrame = new JFrame("mainFrame");
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainFrame.setSize(100, 100);
    mainFrame.setLayout(new BorderLayout());
    JButton myButton = new JButton("subFrame");
    
    myButton.addActionListener(new ActionListener() 
    {
      public void actionPerformed(ActionEvent myEvent) 
      {		
        System.out.println("show subFrame");
    	subFrame.setTitle("subFrame: " + System.currentTimeMillis());    	
    	subFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    	subFrame.setSize(400, 400);
    	subFrame.toFront();
    	subFrame.setLayout(new BorderLayout());
    	subFrame.add(new JTextField(), BorderLayout.NORTH);    	
    	subFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // oder DISPOSE_ON_CLOSE 	
    	subFrame.setVisible(true);
      }
    });
    mainFrame.add(myButton, BorderLayout.CENTER);
    mainFrame.setVisible(true);
  }
}
```


----------



## flashray (12. April 2006)

Hallo,


```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextField;

public class CloseDemo {

	JFrame mainFrame = new JFrame("mainFrame");
	
	JFrame subFrame = new JFrame();
	
	JButton myButton = new JButton("subFrame");
	
	JTextField tField = new JTextField();
	
	public CloseDemo() {
		mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		mainFrame.setSize(100, 100);
		mainFrame.setLayout(new BorderLayout());
		
		subFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		subFrame.setSize(400, 400);
		subFrame.toFront();
		subFrame.setLayout(new BorderLayout());
		subFrame.add(tField, BorderLayout.NORTH);
		
		myButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent myEvent) {
				tField.setText("");
				subFrame.setTitle("subFrame: " + System.currentTimeMillis());
				subFrame.setVisible(true);
			}
		});
	
		mainFrame.add(myButton, BorderLayout.CENTER);
		mainFrame.setVisible(true);
	}
	
	public static void main(String[] args) {
		new CloseDemo();
	}
}
```


Vg Erdal


----------

