# Das schließen des JFrame abfangen, wiei?



## Waynes (1. Sep 2007)

Hallösche,

wie kann ich den mouseclick auf das "X" oben rechts am fenster abfangen sprich der  benutzer schließt das Fenster doch vorher soll noch ein popup window erscheinen, welches fragt ob der user abspeichern möchte etc...


----------



## Kim Stebel (1. Sep 2007)

```
class Listener implements WindowListener
{

  public void windowActivated(WindowEvent arg0)
  {}

  public void windowClosed(WindowEvent arg0)
  {}

  public void windowClosing(WindowEvent arg0)
  {
    //hier kommt dein Code hin
  }

  public void windowDeactivated(WindowEvent arg0)
  {}

  public void windowDeiconified(WindowEvent arg0)
  {}

  public void windowIconified(WindowEvent arg0)
  {}

  public void windowOpened(WindowEvent arg0)
  {}
  
}
public class Test
{
  public static void main(String... args)
  {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    frame.addWindowListener(new Listener());
    
  }
 
}
```


----------



## Waynes (1. Sep 2007)

danke dir!


----------



## Waynes (1. Sep 2007)

```
public void windowClosing(WindowEvent arg0)
      {    	 
    	        
    	  
    	  int n = JOptionPane.showConfirmDialog(null,this,"Alles klar?",JOptionPane.YES_NO_OPTION);
	        
    	  if (n == 0)//YES
	      {
	        	System.out.println("speichern!");
	      }
	      if (n == 1)//NO
	      {
	    	  System.out.println("beenden");//return;
	      } 	   
      
      
      }
```

wenn ich auf das "X" klicke kommt mein kleiner dialog und wenn ich den beende kommt im eclipse ne fehlermeldung und ich kann das app auch nicht mehr in der taskleiste beenden?

```
Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem: 
	The method showConfirmDialog(Component, Object, String, int) in the type JOptionPane is not applicable for the arguments (Listener, String, int)

	at Listener.windowClosing(Listener.java:20)
	at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)
	at java.awt.Window.processWindowEvent(Unknown Source)
	at javax.swing.JFrame.processWindowEvent(Unknown Source)
	at java.awt.Window.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
```


----------



## Der Müde Joe (1. Sep 2007)

(Component, Object, String, int)
 (Listener, String, int)

fällt dir was auf?

this = Listener aber er will ne Component (zB JFrame)


----------



## Waynes (1. Sep 2007)

Der Müde Joe hat gesagt.:
			
		

> (Component, Object, String, int)
> (Listener, String, int)
> 
> fällt dir was auf?
> ...



und ich nehme mal an das Jframe muss das JFrame sein zu dem der WindowListener gehört ?

das this hat mir dasd eclipse geaddet als ich quick fix machte ;-)


----------



## Waynes (1. Sep 2007)

myWindow.addWindowListener(myWindow.new Listener());

damit gehts und ich habe die Klasse in meiner Haupt.class laufen welche von JFrame ableitet. myWindow ist dann eine Haupt instanz.

dieses Konstrukt myWindow.new Listener() hab ich ja noch nie gesehen sieht ja schrecklich aus...


----------

