WindowListener Probleme mit Dialog

m4rtin-

Grünschnabel
Hallo, ich habe ein kleines Problem mit meinem WindowListener und zwar schlißt er sich immer egal ob ich bei meinem ConfirmDialog YES oder NO drücke :
Code:
public void windowClosing(WindowEvent event)
        {
            // TODO Auto-generated method stub
           
 int abfrage = JOptionPane.showConfirmDialog(aus, "Wollen Sie wirklich beenden?", "Beenden", JOptionPane.YES_NO_OPTION);

if(abfrage == JOptionPane.YES_OPTION)
	{
		event.getWindow().setVisible(false);
		event.getWindow().dispose();
		zufall gui = new zufall();
		System.exit(0);
           }

if(abfrage == JOptionPane.NO_OPTION)
{
}

        }

Bei den ActionListener Funktioniert ohne Probleme nur halt hier beim WindowListener schließt er immer das Fenster egal was man drückt.

mfg m4rtin-
 
Also ich habe mich mal schlau gemacht und dabei dieses hier gefunden :
windowClosing :
Das Fenster soll geschlossen werden. Diese Methode wird aufgerufen, wenn der Anwender das Fenster über die Titelleiste, das Systemmenü oder die Tastenkombination [ALT]+[F4] schließen will. Es liegt in der Verantwortung der Anwendung, in diesem Fall Code zur Verfügung zu stellen, der das Fenster tatsächlich schließt. Standardmäßig reagiert das Programm nicht auf diese Benutzeraktionen.

Aber gibt es nicht dennoch eine Möglichkeit wie man windowClosing abbrechen kann und man erreichen kann das das Programm darauf reagiert?

mfg m4rtin-
 
Hallo!

So kannst du das Fenster vom Schließen abhalten:

Code:
/**
 * 
 */
package de.tutorials.training;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

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

/**
 * @author Darimont
 * 
 */
public class WindowClosingExample extends JFrame {

	public WindowClosingExample() {
		super("WindowClosingExample");
		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				int abfrage = JOptionPane.showConfirmDialog(
						WindowClosingExample.this,
						"Wollen Sie wirklich beenden?", "Beenden",
						JOptionPane.YES_NO_OPTION);

				if (abfrage == JOptionPane.YES_OPTION) {
					setVisible(false);
					dispose();
					System.exit(0);
				} else {
					return;
				}

			}
		});

		pack();
		setVisible(true);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new WindowClosingExample();
	}

}

Gruß Tom
 
Hallo Thomas,
bei mir funktioniert es leider nicht, oder ich habe etwas übersehen.
Folgendes Szenario.
Wenn ich mein Programm beende, wird überprüft ob Datei, die mit dem Programm geöffnet wurde, bearbeitet wurde.
Wenn ja, kommt ein Dialog, der den Benutzer fragt, ob er vorher speichern möchte, bevor er das Programm beeendet, wenn nein, dann soll das Programm beendet werden.
Bei der cancel und close option soll das programm nicht beendet werden.

Ich hab an die entsprechenden Stellen, ein return gesetzt, aber das Programm wird trotzdem beendet.
Gleiches habe ich auch versucht in dem JFileChooser-SaveDialog, dass der Benutzer dort abbricht, dass Programm nicht beendet wird.
Aber es klappt nicht.

Kannst du mir vielleicht sagen warum?
Hier ist meine windowClosingMehtode

Code:
public void windowClosing(WindowEvent e) {
    	
    	if(AertoFile.getInstance().isModified() == true) {
    	
    		int savewithoutdelete = JOptionPane.showConfirmDialog(
    			e.getComponent(), 
    			"Die Datei wurde verändert. Wollen Sie vor dem Beenden noch   
                         Speichern?",
    			"Beenden ohne Speichern?", 		
    			JOptionPane.YES_NO_CANCEL_OPTION,
    			JOptionPane.QUESTION_MESSAGE);
    		
    		//YES_OPTION of the confirmDialog
    		//open a FileChooserSaveDialog
    		if (savewithoutdelete == JOptionPane.YES_OPTION) { 
	    		// save before cancel	
	    		JFileChooser chooser = new JFileChooser();
	    		chooser.setFileFilter(new AertoFileFilter());
	    		int returnState = chooser.showSaveDialog(e.getComponent());
	    		//APPROVE_OPTION of the FileChooser
	    		if (returnState == JFileChooser.APPROVE_OPTION){
	    				String path =      
                                                          AertoModel.getInstance().getCurrentWorkingFile();
	    				saveDataStructure(path);
	    		}
	    		//CANCEL_OPTION of the FileChooser
	    		else if (returnState == JOptionPane.CANCEL_OPTION){
	    			return;
	    		} 
	    		//CLOSED_OPTION of the FileChooser
	    		else if (returnState == JOptionPane.CLOSED_OPTION) {
	    			return;
	    		}    		
     		} 
            //NO_OPTION of the confirmDialog
    		//Quit without saving
    		else if (savewithoutdelete == JOptionPane.NO_OPTION) {
    			e.getWindow().dispose();
     		} 
    		//CANCEL_OPTION of the confirmDialog
    		//Close ConfirmDialog, but don't exit system
    		else if (savewithoutdelete == JOptionPane.CANCEL_OPTION) {
    			return;
     		}	
    		//CLOSED_OPTION of the confirmDialog
    		//Close ConfirmDialog, but don't exit system
    		else if (savewithoutdelete == JOptionPane.CLOSED_OPTION) {
    			return;
    		}
    	} 
    	//if file has not been modified exit system
    	else {
    		e.getWindow().dispose();
    	}
    }
Danke und Gruß
Sopraner
 
Zurück