Tit   Inh   Ind   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   <<   <   >   >> 

19.1 Window-Events



Ein Window-Event wird immer dann generiert, wenn sich am Status eines Fensters eine Änderung ergeben hat, die für das Anwendungsprogramm von Interesse sein könnte. So erlangt das Programm beispielsweise Kenntnis davon, wenn ein Fenster erstellt oder zerstört, aktiviert oder deaktiviert oder wenn es symbolisiert oder wiederhergestellt wird.

Ein Empfänger für Window-Events muß das Interface WindowListener implementieren und bekommt Events des Typs WindowEvent übergeben. WindowEvent erweitert die Klasse ComponentEvent und stellt neben getID und getSource die Methode getWindow zur Verfügung, mit der das Fenster ermittelt werden kann, das die Nachricht ausgelöst hat.

public Window getWindow()
java.awt.event.WindowEvent

Die Registrierung der Empfängerklasse erfolgt mit der Methode addWindowListener, die in den Klassen Dialog und Frame zur Verfügung steht:

public void addWindowListener(WindowListener l)
java.awt.Frame

Tabelle 19.1 gibt eine Übersicht der Methoden von WindowListener und erklärt ihre Bedeutung:

Ereignismethode Bedeutung
windowActivated Das Fenster wurde aktiviert. Diese Methode wird nach dem Erstellen des Fensters aufgerufen und wenn ein Fenster, das im Hintergrund stand, erneut in den Vordergrund gelangt.
windowClosed Das Fenster wurde geschlossen.
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.
windowDeactivated Das Fenster wurde deaktiviert, also in den Hintergrund gestellt.
windowDeiconified Das Fenster wurde wiederhergestellt, nachdem es zuvor auf Symbolgröße verkleinert wurde.
windowIconified Das Fenster wurde auf Symbolgröße verkleinert.
windowOpened Das Fenster wurde geöffnet.

Tabelle 19.1: Methoden von WindowListener

Das folgende Programm systematisiert die Implementierung der Methode windowClosing, deren Verwendung bereits mehrfach gezeigt wurde. Dazu leitet es aus Frame eine neue Klasse CloseableFrame ab und registriert im Konstruktor einen anonymen WindowAdapter, der windowClosing überlagert und das Fenster durch Aufrufe von setVisible(false) und dispose() schließt. Alle Ableitungen von CloseableFrame besitzen nun die Fähigkeit, vom Anwender per Systemmenü, per Schließen-Button oder durch Drücken von [ALT]+[F4] beendet zu werden. Die Klasse Listing1901 demonstriert die Anwendung der neuen Klasse und erzeugt ein Fenster wnd aus CloseableFrame. Um das Programm nach dem Schließen des Fensters zu beenden, registriert es bei der Fensterklasse zusätzlich einen anonymen WindowAdapter, der bei Aufruf von windowClosing (also nach dem Schließen des Fensters) das Programm per Aufruf von System.exit beendet:

001 /* Listing1901.java */
002 
003 import java.awt.*;
004 import java.awt.event.*;
005 
006 class CloseableFrame
007 extends Frame
008 {
009    public CloseableFrame()
010    {
011       this("");
012    }
013 
014    public CloseableFrame(String title)
015    {
016       super(title);
017       addWindowListener(
018          new WindowAdapter() {
019             public void windowClosing(WindowEvent event)
020             {
021                setVisible(false);
022                dispose();
023             }
024          }
025       );
026    }
027 }
028 
029 public class Listing1901
030 {
031    public static void main(String[] args)
032    {
033       CloseableFrame wnd = new CloseableFrame("Listing1901");
034       wnd.setBackground(Color.lightGray);
035       wnd.setSize(300,200);
036       wnd.setLocation(200,100);
037       wnd.setVisible(true);
038       wnd.addWindowListener(
039          new WindowAdapter() {
040             public void windowClosed(WindowEvent event)
041             {
042                System.out.println("terminating program...");
043                System.exit(0);
044             }
045          }
046       );
047    }
048 }
Listing1901.java
Listing 19.1: Die Klasse CloseableFrame

 Beispiel 


 Tit   Inh   Ind   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   <<   <   >   >> 
Go To Java 2, Addison Wesley, Version 1.0.2, © 1999 Guido Krüger, http://www.gkrueger.com