Ereignisse

Nach der Erstellung einer Anzeige und verschiedener Fensterobjekte sowie dem Starten der Anwendungsnachrichtenschleife stellt sich die Frage, wo die Verarbeitungsprozesse tatsächlich stattfinden. Die eigentliche Verarbeitung findet immer dann statt, wenn ein Ereignis aus der Warteschlange gelesen und einem Fensterobjekt zugeteilt wird. Ein Großteil der Anwendungslogik wird in Form von Reaktionen auf Benutzerereignisse implementiert.

Das Grundmuster ist das Hinzufügen einer Listener-Funktion zu einem bestimmten Fensterobjekt, das Sie erstellt haben. Sobald das entsprechende Ereignis eintritt, wird der Code für die Listener-Funktion ausgeführt. Das folgende einfache Beispiel wurde aus org.eclipse.swt.examples.helloworld.HelloWorld3 übernommen:

   Display display = new Display ();
   Shell shell = new Shell (display);
   Label label = new Label (shell, SWT.CENTER);
   ...
   shell.addControlListener(new ControlAdapter() {
      public void controlResized(ControlEvent e) {
         label.setBounds (shell.getClientArea ());
      }
   });

Für jeden Typ Listener-Funktion gibt es eine Schnittstelle, die die Listener-Funktion definiert (XyzListener), eine Klasse, die Ereignisinformationen bereitstellt (XyzEvent) und eine API-Methode, die die Listener-Funktion hinzufügt (addXyzListener).   Wenn in der Schnittstelle einer Listener-Funktion mehrere Methoden definiert sind, gibt es außerdem einen Adapter (XyzAdapter), der die Schnittstelle der Listener-Funktion implementiert und leere Methoden bereitstellt. Alle Ereignisse, Listener-Funktionen und Adapter sind im Paket org.eclipse.swt.events definiert.

Die folgende Tabelle fasst die verfügbaren Ereignisse und die Fensterobjekte, die das jeweilige Ereignis unterstützen, zusammen.

Ereignistyp

Beschreibung

Fensterobjekte

Arm

Wird generiert, wenn ein Fensterobjekt (z. B. eine Menüoption) "gedrückt" wird.

MenuItem

Control

Wird generiert, wenn ein Steuerelement versetzt oder seine Größe geändert wird.

Control, TableColumn, Tracker

Dispose

Wird generiert, wenn ein Fensterobjekt entweder über das Programm oder durch den Benutzer entfernt wird.

Fensterobjekt

Focus

Wird generiert, wenn der Fokus auf ein Steuerelement gesetzt bzw. von ihm genommen wird.

Control

Help

Wird generiert, wenn der Benutzer Hilfe zu einem Fensterobjekt anfordert, beispielsweise durch Drücken der Taste F1.

Control, Menu, MenuItem

Key

Wird generiert, wenn der Benutzer eine Taste drückt oder loslässt, sofern das Steuerelement im Tastatureingabebereich liegt.

Control

Menu

Wird generiert, wenn ein Menü angezeigt oder verdeckt wird.

Menu

Modify

Wird angezeigt, wenn der Text eines Fensterobjekts geändert wird.

CCombo, Combo, Text, StyledText

Mouse

Wird generiert, wenn der Benutzer die Maus über dem Steuerelement drückt, loslässt oder doppelklickt.

Control

MouseMove

Wird generiert, wenn der Benutzer die Maus über das Steuerelement zieht.

Control

MouseTrack

Wird generiert, das Steuerelement über die Maus aktiviert, inaktiviert oder die Maus über das Steuerelement gezogen wird.

Control

Paint

Wird generiert, wenn das Steuerelement erneut gezeichnet werden muss.

Control

Selection

Wird generiert, wenn der Benutzer ein Element im Steuerelement auswählt.

Button, CCombo, Combo, CoolItem, CTabFolder, List, MenuItem, Sash, Scale, ScrollBar, Slider, StyledText, TabFolder, Table, Table CursorTableColumn, TableTree, Text, ToolItem, Tree

Shell

Wird generiert, wenn eine Shell auf Symbolgröße oder auf Vollbildgröße gesetzt, aktiviert, inaktiviert oder geschlossen wird.

Shell

Traverse

Wird generiert, wenn sich ein Benutzer durch Tastatureingaben durch ein Steuerelement bewegt.

Control

Tree

Wird generiert, wenn der Benutzer Einträge in einer Baumstruktur erweitert bzw. komprimiert.

Tree, TableTree

Verify

Wird generiert, wenn der Text eines Fensterobjekts geändert werden soll. Auf diese Weise kann die Anwendung die Textänderung zulassen oder verhindern.

Text, StyledText

Ereignis ohne Ereignistyp

Die oben beschriebene System der Ereignistypen wird durch einen maschinennahen Mechanismus für Fensterobjektereignisse ohne Ereignistyp implementiert. Dieser Mechanismus ist nicht zur Verwendung durch Anwendungen gedacht. Er ist jedoch innerhalb der SWT-Implementierung erkennbar. Außerdem wird er bei vielen Implementierungen von Assistentenseiten der Workbench eingesetzt.

Der Mechanismus ohne Ereignistypen identifiziert den Ereignistyp anhand einer Konstanten und definiert eine generische Listener-Funktion, die mit dieser Konstante bereitgestellt wird. Auf diese Weise kann die Listener-Funktion eine vorgangsorientierte Listener-Funktion bereitstellen. Der folgende Ausschnitt definiert eine generische Steuerroutine für Ereignisse und fügt einer Shell mehrere Listener-Funktionen hinzu.

   Shell shell = new Shell();
   Listener listener = new Listener() {
      public void handleEvent(Event e) {
         switch (e.type) {
            case SWT.Resize:
               System.out.println ("Resize received");
               break;
            case SWT.Paint:
               System.out.println ("Paint received");
               break;
            default:
               System.out.println ("Unknown event received");
         }
      }
   };
   shell.addListener(SWT.Resize, listener);
   shell.addListener(SWT.Paint, listener);

Rechtshinweise.