# Fenster Schließen mit awt?



## Krossec (5. Juli 2010)

Hallo, ich bräuchte nochmal Eure tatkräftige Hile, zu Verstehen wie man mit der AWT-Bibliothek ein Fenster mit dem x-Button 
schließen kann.

hab jetzt schon mehrere sachen gelesen und alles hat mich nicht weiter gebracht. daher poste ich mal meinen Java-Code:

```
public class FirstGUI extends Frame
{
	public FirstGUI()
       {
    	  setTitle("test");
    	  setSize(800,800);
    	  setLocationByPlatform(true);
    	   	
    	  //Anlegen der Fensterelemente
    	  Panel pan = new Panel();
     	  TextField tf = new TextField("hallo");
    	
          Button ok = new Button("OK");                  // OK-Butten mit dem mann später auch das Fenster schließen soll
    	  addWindowListener(new Beenden());   // Objekt zum Fenster schließen
    	   	
    	  //Fügt Elemente in das Fenster ein
    	  pan.add(tf);
    	  pan.add(ok);
    	  add(pan);
    		   	
    	  setVisible(true);    	   
        }
	
       class Beenden extends WindowAdapter
	{		
	    public void windowsClosing(WindowEvent e)
           {
	       dispose();
	       System.exit(0);
           }	
	}	
}
```


----------



## Krossec (5. Juli 2010)

Habs selber hinbekommen.
Man muss nur den WindowsListerner und die Action-Methoden des WindowsListener hinzufügen
dann lässt sich das Fenster mit dem X-Button schlieben.

```
import java.awt.event.WindowListener;
import java.awt.event.ActionListener;

public class FirstGUI extends Frame implements WindowListener 
{
private static final long serialVersionUID = 1L;    // wichtig für die Interface-Deklaration (FirstGUI)!!
...
addWindowListener( this );             // Lässt Fenster per X-Button schließen
...
Button Schl = new Button("Schließen");                  // eine Schaltfläche "Schließen" wird erstellt
Schl.addActionListener(new Beenden());              // Schaltfläche wird mit der inneren Klasse "Beenden" verknüpft (s.u.)
    	
//************************* Aktions-Methoden *********************************	
	@Override
	public void windowActivated(WindowEvent e) {				
	}

	@Override
	public void windowClosed(WindowEvent e) {				
	}

	@Override
	public void windowClosing(WindowEvent ew) {		
		System.exit(0);                                                       // nur hier den Befehl System.exit(0); einfügen
	}

	@Override
	public void windowDeactivated(WindowEvent e) {		
	}

	@Override
	public void windowDeiconified(WindowEvent e) {		
	}

	@Override
	public void windowIconified(WindowEvent e) {		
	}

	@Override
	public void windowOpened(WindowEvent e) {		
	}	
//************************* Ation-Klassen *********************************	
	class Beenden implements ActionListener
	{
		public void actionPerformed (ActionEvent e)
		{
			System.exit(0);
		}
	}
}
```


----------



## FrankBooth (5. Juli 2010)

... aber warum jetzt so häßlich mit implements WindowListener
und nicht wie vorher mit Adapter?


----------



## Krossec (5. Juli 2010)

weil diese Klasse(zum Schließen des Fensters) mit einem ActionsKnopf "Schließen" ausgelöst wird.
da muss der ActionsListener eingebunden werde, der nach Klickaktion auf die Schaltfläche "Schließen" reagieren muss

anders herrum, wenn mann das fenster nur mit dem X-Button schließen möchte, bedarf es den Windowslistener, der die Modothe "windowClosing" aufruft und durch seinen
Befehl System.exit(0); das Programm beendet und das Fenster schließt

mit anderen Actionen ist das nicht mehr möglich!

Gruß


----------



## Akeshihiro (5. Juli 2010)

Ähm... Nur mal so zur Info: WindowAdapter implementiert bereits WindowListener, also sind auch die Methoden vorhanden. Dein Problem war der falsche Methodenname, denn in deinem ersten Code heißt die Methode window*s*Closing anstatt wie sie eigentlich heißen sollte, nämlich windowClosing. Das ist und war der einzige Fehler.

Nur so als Tipp: Bei Methoden, die du überlagern (überschreiben) willst, die Annotation @Override anfügen, dann meckert jede IDE und bitte keine Klassen verschachteln, das führt zu Fehlern, lässt die Wiederverwendbarkeit sinken und sieht schlecht aus und nebenbei ist es auch kein doller Programmierstil, wenn man Sachen zusammenpackt, die eigentlich nichts mit einander zu tun haben.

```
public class Beenden extends WindowAdapter {
	@Override
	public void windowClosing(WindowEvent e) {
		e.getWindow().dispose();
		System.exit(0);
	}
}
```


----------

