WindowEvents beim Schliessen eines Fensters

  • Themenstarter Themenstarter Jochen82
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
J

Jochen82

Gast
Hallo zusammen,

ich bastel an einer Swing-Applikation. Aus einem Hauptfenster (besser gesagt von dessen Controller) wird ein weiteres Fenster geöffnet:

Code:
DetailFrame df = new DetailFrame();
df.pack();
df.setVisible(true);

Dieses neue Frame besitzt einen WindowListener. Wenn das Fenster geöffnet wird, dann wird auf diesem Listener die Methode windowActivated() aufgerufen.

Wenn dieses Fenster wieder geschlossen wird (z.B. mit dem X oben rechts), dann soll das Programm darauf ebenfalls reagieren. Leider wird keiner der Methoden des WindowListeners aufgerufen, das Fenster schließt sich einfach. Ich hätte erwartet, dass windowClosing() aufgerufen wird.

Warum ist das nicht der Fall?

Gruß
Jochen
 
hmm, mein linker kleiner Finger sagt mir, dass du doch am besten auch diesen WindowListener posten solltest 😉
idealerweise die ganze DetailFrame-Klasse, um nicht relevante Details gekürzt
 
Okay, hier mal aufs wesentliche gekürzt:

Code:
public class DetailFrame extends JFrame implements Observer 
{
    private DetailControl controller;

    public DetailFrame(DeamonThread aDeamonThread)
    {
        super(aDeamonThread.getThreadName());
        
        controller = new DetailControl(this, aDeamonThread);

        (...)
    }
}


Und der dazugehörige Listener:

Code:
public class DetailControl implements WindowListener, ActionListener
{
    private DetailFrame view;
    private DeamonThread deamonThread;
    
    public DetailControl(DetailFrame aDetailFrame, DeamonThread aDeamonThread)
    {
        view = aDetailFrame;
        deamonThread = aDeamonThread;
    }

    public void actionPerformed(ActionEvent e)
    {
        if (e.getActionCommand().equals("OK")) 
        {
            view.dispose();
        }
        else if (e.getActionCommand().equals("Abbrechen")) 
        {
            view.dispose();
        }
        else if (e.getActionCommand().equals("Refresh")) 
        {
            System.out.println("Refreshing...");
            deamonThread.refresh();
        }
    }
    
    public void windowClosing(WindowEvent e) 
    {
        System.out.println("WindowEvent: windowClosing");
    }
    public void windowOpened(WindowEvent e)
    {
        System.out.println("WindowEvent: windowOpened");
    }
    public void windowIconified(WindowEvent e)
    {
        System.out.println("WindowEvent: windowIconified");
    }
    public void windowDeiconified(WindowEvent e)
    {
        System.out.println("WindowEvent: windowDeiconified");
    }
    public void windowDeactivated(WindowEvent e) 
    {
        System.out.println("WindowEvent: windowDeactivated");
    }
    public void windowClosed(WindowEvent e) 
    {
        System.out.println("WindowEvent: windowClosed");
    }
    public void windowActivated(WindowEvent e) {}
    {
        System.out.println("WindowEvent: windowActivated");
    }
}
 
Klatsch!!! *stirnklopf*
Vor lauter Bäumen den Wald nicht gesehen, danke für diesen Stubser. Bin wohl gedanklich schon beim Halbfinalspiel nachher. 🙂

Aber trotzdem interessant, dass die Methode windowActivated() aufgerufen wird, obwohl gar kein WindowListener für diesen Frame registriert wurde...
 
Jochen82 hat gesagt.:
Code:
public class DetailControl implements WindowListener, ActionListener
{
     public void windowActivated(WindowEvent e) {}
    {
        System.out.println("WindowEvent: windowActivated");
    }
}

siehst du {} hinter public void windowActivated(WindowEvent e) ?
das heißt, dass diese Operation leer ist,

der Block darunter mit der Ausgabe ist also ein anonymer Block, der quasi als Konstruktor ausgeführt wird
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben