Ereignisse

Nach der Erstellung einer Anzeige und verschiedener Widgets 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 Widget 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 Widget, 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-Funktionhinzufü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 Widgets, die das jeweilige Ereignis unterstützen, zusammen.

Ereignistyp

Beschreibung

Widgets

Arm

Wird generiert, wenn ein Widget (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 Widget entweder über das Programm oder durch den Benutzer entfernt wird.

Widget

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 Widget 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 Widgets 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 Widgets 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 Widget-Ereignisse 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. Das folgenden Snippet 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);

Copyright IBM Corporation und Andere 2000, 2003.