# windowClosing() - JFrame nicht durch X knopf gleich beenden?



## ein verzweifelter (4. Jul 2008)

```
import java.awt.event.WindowAdapter;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class FrameTester extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 4261975535381435203L;

	public FrameTester(String title) {
		super(title);
		setSize(200, 200);
		setLocation(200, 200);
		setResizable(false);
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		addWindowListener(new WindowAdapter() {
			public void windowClosing() {
				if (JOptionPane.showConfirmDialog(null, "wirklich schliessen?",
						"Bestaetigung", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
					System.exit(0);
				}
			}
		});
	}

	public static void main(String[] args) {
		FrameTester test = new FrameTester("hund");
		test.setVisible(true);
	}

}
```

Warum geht das nicht, dass ich dadurch den ConfirmationDialog bekomme!?
Und wie muss ich es machen, dass ich wenn ich auf das X drücke eben erst so eine bestätigungs anforderung bekomme?

danke schonmal im Voraus!!!


----------



## SlaterB (4. Jul 2008)

public void windowClosing() ist eine völlig beliebige von dir ausgedachte Operation,
warum sollte irgendjemand diese Operation aufrufen?

du musst schon eine der Operationen des Interfaces überschreiben, da ist jedes Detail wichtig

(edit: wenn du diesen geschickten Hinweis nicht verstehst weil du gar nicht weißt, was da grundsätzlich passiert, dann sag Bescheid)


----------



## Gast (4. Jul 2008)

meiner meinung nahc istd as eine Operation des Interfaces!

http://209.85.135.104/search?q=cach...chließen+frame+java&hl=de&ct=clnk&cd=17&gl=de


----------



## SlaterB (4. Jul 2008)

zu beachten sind die genaue Schreibweise des Operationsnamens als auch Anzahl + Typ aller Parameter (!)


----------



## Gast (4. Jul 2008)

ich depp^^
juhu danke für deine hilfe...


----------



## Tobias (4. Jul 2008)

@Override hilft übrigens solche Fehler zu vermeiden - Methoden, die eine andere überschreiben sollen als @Override taggen und gucken, ob der Compiler mit dir einer Meinung ist .


----------



## Guest (4. Jul 2008)

Wer implementiert eigentlich hier das Interface WindowsAdapter? Deine Klasse FrameTester sollte es tun und du solltest der Funktion AddWindowsListener this übergeben. Du erzeugst da ein anonymes WindowsAdapter-Objekt und übergibst es dieser Methode. aber dein eigentliches Frame hat damit überhaupt nichts zu tun!
Du gibst da einen Link als Referenz dann soltest du das Beispiel dir genauer ansehen.

Das Beispiel aus deinem Link:


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

class FensterWegImplementsAll extends JFrame implements WindowListener
{
  public FensterWegImplementsAll()
  {
    setSize( 400, 400 );

    addWindowListener( this );

    setVisible( true );
  }

  // Implementiere WindowListener

  public void windowClosing( WindowEvent event ) {
    System.exit( 0 );
  }

  public void windowClosed( WindowEvent event ) {}

  public void windowDeiconified( WindowEvent event ) {}

  public void windowIconified( WindowEvent event ) {}

  public void windowActivated( WindowEvent event ) {}

  public void windowDeactivated( WindowEvent event ) {}

  public void windowOpened( WindowEvent event ) {}

  public static void main( String args[] )
  {
    new FensterWegImplementsAll();
  }
}
```


----------



## Tobias (4. Jul 2008)

Nirgends steht geschrieben, das das Frame selbst sein WindowListener sein muss. Da kann auch jedes beliebige andere Objekt stehen - mit einer inneren anonymen Klasse hat's halt den Vorteil des Vollzugriffs auf alle Member des Frames. Ich verstehe nicht, was du uns sagen willst.

mpG
Tobias


----------



## SlaterB (4. Jul 2008)

der Link war nur wichtig für die genaue Signatur der Operation,

man wird doch wohl mal WindowAdapter überschreiben dürfen oder nicht? 
wieso auf einmal der unschöne Vorschlag, das JFrame mit leeren Operationen zu verunstalten?

es ist sicherer, das stimmt allerdings, bei falschen Operationen meckert der Compiler,


----------



## Tobias (4. Jul 2008)

Deshalb in Eclipse einschalten, dass eine Warning augegeben wird, wenn eine überschriebene Methode nicht mit @Override markiert ist und brav taggen. Schon gibt es keine Probleme mehr. Alternativ Source->Override/Implement Methods.


----------

