Problem mit Window Listener WINDOW_CLOSING

Hallo!
Ich hätte ein kleines Problem. Ich fange gerade an Java zu lernen, und wollte mir gleichzeitig eigene Klassen programmiren. Jetzt mache ich eine Klasse, um ein Hauptfenster zu erstellen. Sie ist eine Kindklasse von JFrame und implementiert den WindowListener.

Ich möchte den Programmierer bestimmen lassen, ob beim Schliessen des Fensters eine Abfrage gestellt werden soll. Also hab ich eine Klassenvariable boAbfrageSchliessen, welche ich den Programmierer durch die Methode AbfrageSchliessen(boolean Schliessen) ändern lasse.

Dann fange ich vom WindowListener das Event Window_Closing ab, und sage, dass dieser erst die Funktion QueryClose aufrufen soll. Die prüft dann auch, ob eine Abfrage statt finden soll, und wenn das Fenster wirklich geschlossen werden soll, gibt sie true zurück. Dann ruf ich in der Window_Closing noch die Funktion Schliessen() auf, die das Fenster beendet, und das Programm beendet (oWindow.dispose(); System.exit(0); )

Aber leider passiert davon überhaupt nix. Wenn ich im Programm auf den Schliessen Knopf drücke, wird einfach nur das Fenster geschlossen und das Programm nicht beendet (die Eingabeaufforderung merkt nicht, dass das Programm schon fertg ist, System.exit(0); wird also nicht ausgeführt.

Ich hoffe, dass mir hier jemand helfen kann, da das wahrscheinlich einfach nur an meiner mangelnden Erfahrung liegt. Sicher ein ganz dummer Fehler. :denk:

Danke im Vorraus

Der Quellcode von mainWindow.java
[code]/*
Klasse: mainWindow.java
*/

// Imports //

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.border.*;

public class mainWindow extends JFrame implements WindowListener

{
// Klassenvariablen //

JFrame oWindow;
boolean boAbfrageSchliessen = false;

// Klassenmethoden //

// Konstruktor

mainWindow()
{
super();
addWindowListener(this);
}

// Allgemein

//lässt den Programmierer ein neues mainWindow erstellen
JFrame Erstellen(String strTitel, int iBreite, int iHoehe, boolean GroesseVerstellbar)
{
oWindow = new JFrame(strTitel);
oWindow.setSize(iBreite,iHoehe);
oWindow.setResizable(GroesseVerstellbar);
oWindow.setBackground(Color.black);
oWindow.setVisible(true);

return oWindow;
}

// lässt den Programmierer die Hintergrundfarbe fest legen
boolean HGFarbe(Color Farbe)
{
oWindow.setBackground(Farbe);
return true;
}

// fragt, ob das Fenster wirkich geschlossen werden soll
boolean QueryClose()
{
if(boAbfrageSchliessen == true)
{
int iResult;
iResult=JOptionPane.showConfirmDialog (null,”Programm wirklich schliessen?”,””,JOptionPane.YES_NO_OPTION);
if(iResult==JOptionPane.YES_OPTION)
{
return true;
}
else
{
return false;
}
}
return true;
}

// schließt das Fenster
boolean Schliessen()
{
oWindow.dispose();
System.exit(0);
return true;
}

// lässt den Programmierer bestimmen, ob eine Abfrage für das Schliessen erfolgen soll
boolean AbfrageSchliessen(boolean Schliessen)
{
boAbfrageSchliessen = Schliessen;
return true;
}

// erweitert den WindowListener
protected void processWindowEvent(WindowEvent e)
{
if(e.getID()== e.WINDOW_CLOSING)
{
boolean boResult = QueryClose();
if(boResult == true)
{
Schliessen();
}
}
else
{
super.processWindowEvent(e);
}
}

public void windowClosing(WindowEvent e)
{}
public void windowOpened(WindowEvent e)
{}
public void windowIconified(WindowEvent e)
{}
public void windowDeiconified(WindowEvent e)
{}
public void windowClosed(WindowEvent e)
{}
public void windowActivated(WindowEvent e)
{}
public void windowDeactivated(WindowEvent e)
{}
public void actionPerformed(ActionEvent e)
{}
}[/code]
Und test.java
[code]
import java.awt.Color;

public class test
{
public static void main (String args[])
{
mainWindow Fenster = new mainWindow();
Fenster.Erstellen(“Ich bin ein Fenster”,800,600,true);
Fenster.AbfrageSchliessen(true);
}
}[/code]

Leave a Reply

Your email address will not be published. Required fields are marked *