# JFrame über Button schliessen



## Frank (19. Jan 2005)

Ich habe ein einfaches JFrame


```
public class About extends javax.swing.JFrame{

  javax.swing.JTextPane   about  = new javax.swing.JTextPane();
  javax.swing.JButton     schliessen    = new javax.swing.JButton("Schliessen");

  public J_Note(){
    super("About...");

    this.setSize(400,480);
    this.setVisible(true);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setLocation(100,100);
    this.setResizable(false);

    schliessen.addActionListener(new java.awt.event.ActionListener(){
      public void actionPerformed(java.awt.event.ActionEvent ev){
        // Was muss hier hin ???
      }
    });

    getContentPane().setLayout(null);
    about.setBounds(10,10,370,390);
    schliessen.setBounds(130,410,120,30);
    getContentPane().add(schliessen);
    getContentPane().add(about);
  }

}
```

Ich rufe dieses JFrame aus einer anderen Klasse auf :


```
about.addActionListener(new java.awt.event.ActionListener(){
      public void actionPerformed(java.awt.event.ActionEvent ev){
        new About();
      }
    });
```

Alle JFrame sollen nun "erhalten" bleiben, nur das obere soll geschlossen werden...


----------



## niemand (19. Jan 2005)

ich würde setVisible(false) nehmen, aber warte mal lieber, was die Profis sagen 

cu


----------



## Gast (19. Jan 2005)

Ich hab ich schon show(false) ausprobiert, das Fenster verschwindet jedoch nicht, es sieht viel mehr so aus, als wäre es abgestürzt, ich kann es immer noch hin und her bewegen.

Bei setvisible hab ich genau das gleiche Problem, Fenster schließt nicht.


----------



## thE_29 (19. Jan 2005)

Probier mal dispose()


----------



## Gast (19. Jan 2005)

dispose kann ich doch nur bei AWT benutzen nicht bei Swing ?!

Gibt es da wirklich keine Möglichkeit ?


----------



## thE_29 (19. Jan 2005)

hä??

bitte probiers, dispose() gibts genauso in Swing wie in AWT, da die Funktion von java.awt.Window kommt!


----------



## Guest (19. Jan 2005)

Ich hab es grad gemerkt, weiß auch nicht was mich da geritten hat.

Hier nochmal der Code

```
public class MenuWindow extends javax.swing.JFrame{

  javax.swing.JTextPane about         = new javax.swing.JTextPane();
  javax.swing.JButton   schliessen    = new javax.swing.JButton("Schliessen");

  public MenuWindow(){

    this.setSize(400,480);
    this.setVisible(true);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setLocation(100,100);
    this.setResizable(false);
    this.setTitle("About...");

    schliessen.addActionListener(new java.awt.event.ActionListener(){
      public void actionPerformed(java.awt.event.ActionEvent ev){
    
      }
    });

    getContentPane().setLayout(null);
    about.setBounds(10,10,370,390);
    schliessen.setBounds(130,410,120,30);
    getContentPane().add(schliessen);
    getContentPane().add(about);

  }
}
```

Wie soll ich dispose den nun in 


```
schliessen.addActionListener(new java.awt.event.ActionListener(){
      public void actionPerformed(java.awt.event.ActionEvent ev){
    
      }
    });
```

anwenden, getContentPane().dispose() will nicht    

 :?:


----------



## thE_29 (19. Jan 2005)

Welches Fenster willstn zumachen??

Wenn es das MenuWindow dann so


```
MenuWindow.this.dispose();
```

Da du in einer anonymen Klassen bist, musst du so auf das this zugreifen!


----------



## Gast (19. Jan 2005)

Komisch, JBuilder hat es mir als Fehler markiert obwohl es trotzdem geht !

Back to the roots , ich nehme jetzt jEdit.

Danke dir...


----------



## CelikBlek (20. Jan 2005)

es sollte auch mit xy.hide();
gehen


----------



## Desperado (22. Jan 2005)

Habe das auch mal versucht, aber bei mir klappts nicht.

Es hapert an der Stelle mit xy.hide(); oder xy.this.dispose();   Aber anzeigen lässt sich das Button.

Findet jemand den Fehler??

Hier der Code: 




```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class GUI implements ActionListener
{

	private Gebaeude geb;	
	private CWand cw;
	private CDelete cd;
	private CMove cm;
	private CCopy cc;
	private CStuetze cs;
	private CDecke cde;	
	
	private JToggleButton button1;	
	private JToggleButton button2;
	private JToggleButton button3;
	private JToggleButton button4;	
	private JToggleButton button5;
	private JToggleButton button6;
	
	private JButton schliessen;
	
	private JLabel label1;
	
	JScrollPane scrollpane;
	
	public GUI()
	{
		JFrame frame = new JFrame("CAD-System");
		frame.setSize(700,400);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		geb = new Gebaeude();
						
		Container standardContainer = frame.getContentPane();
					
		button1 = new JToggleButton("Wand");
		button2 = new JToggleButton("Stütze");	
		button3 = new JToggleButton("Decke");
		button4 = new JToggleButton("Bewegen");
		button5 = new JToggleButton("Löschen");
		button6 = new JToggleButton("Kopieren");
				
		button1.setPreferredSize(new Dimension(150,50));
		button2.setPreferredSize(new Dimension(150,50));
		button3.setPreferredSize(new Dimension(150,50));
		button4.setPreferredSize(new Dimension(150,50));
		button5.setPreferredSize(new Dimension(150,50));
		button6.setPreferredSize(new Dimension(150,50));
				
		button1.addActionListener(this);
		button2.addActionListener(this);
		button3.addActionListener(this);
		button4.addActionListener(this);
		button5.addActionListener(this);
		button6.addActionListener(this);
		
		ButtonGroup bg1 = new ButtonGroup();
		bg1.add(button1);
		bg1.add(button2);
		bg1.add(button3);
		bg1.add(button4);
		bg1.add(button5);
		bg1.add(button6);
		
		JPanel panelRechts = new JPanel();
		JPanel panelLinks  = new JPanel();
		JPanel panelButtons = new JPanel();
		JPanel panel2 = new JPanel();
		JPanel panel3 = new JPanel();
		
		
		
		//scrollpane.setViewportView(geb);		                klappt noch nicht!!
		//standardContainer.add(scrollpane, BorderLayout.CENTER);		
		//scrollpane.add(panelLinks);
		
		standardContainer.add(panelLinks, BorderLayout.CENTER);
		standardContainer.add(panelRechts, BorderLayout.EAST);
		
		BorderLayout border=new BorderLayout();
		BorderLayout border2=new BorderLayout();
		BorderLayout border3=new BorderLayout();
		
		scrollpane=new JScrollPane(geb);
		
		panelLinks.setLayout(border);
		//panelLinks.add(geb, BorderLayout.CENTER);
		panelLinks.add(scrollpane, BorderLayout.CENTER);		
		

		GridLayout grid1 = new GridLayout (3,2);
		GridLayout grid2 = new GridLayout (1,1);
		
		panelRechts.setLayout(border2);		
		panelRechts.add(panelButtons, BorderLayout.NORTH);
		panelRechts.add(panel3, BorderLayout.CENTER);		
		
		panelButtons.setLayout(grid1);			
		panel3.setLayout(border3);		
		
		label1=new JLabel();
		panel3.add(label1, BorderLayout.NORTH);
		
		schliessen= new JButton("Schliessen"); 
		panel3.add(schliessen, BorderLayout.SOUTH);
		schliessen.setBounds(130,410,120,30);
		
		schliessen.addActionListener(this);
		
		
		panelButtons.add(button1);
		panelButtons.add(button4);
		panelButtons.add(button2);
		panelButtons.add(button5);
		panelButtons.add(button3);
		panelButtons.add(button6);

		frame.setVisible(true);
	}
	
	public void actionPerformed(ActionEvent e) 
	{	
		if (cw != null)
			cw.removeController();
			
		if (cm != null)
			cm.removeController();			
			
		if (cd != null)
			cd.removeController();		
			
		if (cc != null)
			cc.removeController();	
			
		if (cs != null)
			cs.removeController();
		if (cde != null)
			cde.removeController();	
		
		//GUI.hide(); 	
		//GUI.this.dispose();
		
		
		// Buttons einstellen
		
		if (e.getSource().equals(button1)) 
		{
			cw = new CWand(geb);
			label1.setText( "<html>Anweisungen: 

Zum Zeichnen der Wand:
 Einmal klicken für Startpunkt,
erneut klicken für Endpunkt.   </html>" );			
		}
		
		if (e.getSource().equals(button2)) 
		{
			cs = new CStuetze(geb);	
			label1.setText( "<html>Anweisungen: 

Zum Zeichnen der Stütze:
 Zur Festlegung des Mittelpunkts einmal klicken.
Erneut klicken für Endpunkt.   </html>" );						
		}
		
		if (e.getSource().equals(button3)) 
		{
			cde = new CDecke(geb);
			label1.setText( "<html>Anweisungen: 

Zum Zeichnen der Decke:
 Beim ersten Klick wird der Startpunkt der ersten 
 Polylinie gespeichert. Beim erneuten Klicken wird
die erste Polylinie gezeichnet und gleichzeitig der 
Startpunkt der zweiten Polylinie gespeichert.
Eine Decke muss mindestens aus drei Linien
 bestehen. 
 Zum Schließen des Polygons rechte Maustaste 
  betätigen. </html>" );										
		}
		
		if (e.getSource().equals(button4)) 
		{
			cm = new CMove(geb);
			label1.setText( "<html>Anweisungen: 

Zum Bewegen des Objekts:
 Gewünschtes Objekt anklicken und Taste gedrückt  
halten. Objekt zum gewünchten Ort ziehen und 
dort Taste loslassen.
 Bei sich überlappenden Objekten wird stets das 
oberste Objekt ausgewählt und bewegt.
 </html>" );										
		}
		
		if (e.getSource().equals(button5)) 
		{
			cd = new CDelete(geb);	
			label1.setText( "<html>Anweisungen: 

Zum Löschen des Objekts:
 Gewünschtes Objekt anklicken und es wird 
gelöscht. Bei sich überlappenden Objekten wird  
stets das oberste Objekt ausgewählt und gelöscht.
 </html>" );													
		}
		
		if (e.getSource().equals(button6)) 
		{
			cc = new CCopy(geb);
			label1.setText( "<html>Anweisungen: 

Zum Kopieren des Objekts:
 Wird ein Bauteil in gleicher Form mehrfach benötigt,
 so kann es kopiert werden. 
Zum Kopieren das gewünschte Bauteil einmal 
oder wenn gewünscht merhmals anklicken.
Das kopierte Bauteil / die kopierten Bauteile
erscheinen Links Oben im Koordinatenursprung.
Bei sich überlappenden Objekten wird stets das 
oberste Objekt ausgewählt und kopiert.
  </html>" );														
		}			
				
	}
	
	
	public static void main(String [] args)
	{
		GUI g=new GUI();
	}
	
	
}
```


----------

