Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage
<< | < | > | >> | API | Kapitel 29 - Low-Level-Events

## 29.1 Window-Events

- 29.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 29.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 worden war.
`windowIconified` | Das Fenster wurde auf Symbolgröße verkleinert.
`windowOpened` | Das Fenster wurde geöffnet.

Tabelle 29.1: Methoden von WindowListener

Das folgende Programm demonstriert die Anwendung der Methode `windowClosing`, deren Verwendung bereits in Abschnitt 23.2.4 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 (unter Windows) durch Drücken von `[ALT]`+`[F4]` beendet zu werden.

Die Klasse `Listing2901` 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 `windowClosed` (also nach dem Schließen des Fensters) das Programm per Aufruf von `System.exit` beendet:

    001 /* Listing2901.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 Listing2901
    030 {
    031   public static void main(String[] args)
    032   {
    033     CloseableFrame wnd = new CloseableFrame("CloseableFrame");
    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 }
| Listing2901.java

Listing 29.1: Die Klasse CloseableFrame

Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage, Addison Wesley, Version 3.0
<< | < | > | >> | API | © 1998-2002 Guido Krüger, http://www.javabuch.de