Events

Nadat een display en enkele widgets zijn gemaakt en de kennisgevingslus van de toepassing is gestart, worden voortdurend acties uitgevoerd zodra een event van de wachtrij wordt gelezen en aan een widget wordt gemeld. De meeste toepassingslogica wordt geïmplementeerd als een reactie op gebruikersevents.

Doorgaans koppelt u een listener aan een widget en wordt de code van de listener uitgevoerd zodra de event van de listener optreedt. Het volgende eenvoudige voorbeeld is aangepast van org.eclipse.swt.examples.helloworld.HelloWorld3:

      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 ());
      }
   });

Voor elk type listener bestaat een interface waarmee de listener (XyzListener), een klasse met event-gegevens (XyzEvent) en een API-methode voor het toevoegen van de listener (addXyzListener) worden gedefinieerd. Als in een listener-interface meer dan één methode is gedefinieerd, wordt de interface met lege methoden door een adapter (XyzAdapter) geïmplementeerd. Alle events, listeners en adapters zijn in het pakket org.eclipse.swt.events gedefinieerd.

De onderstaande tabel bevat een overzicht van de beschikbare events en de widgets waarop de events van toepassing zijn. Events kunnen in twee algemene categorieën worden verdeeld: high-level events van logische bewerkingen voor besturingselementen en low-level events voor specifiekere gebruikersinteracties. High-level events kunnen door meerdere low-level events worden vertegenwoordigd, maar dit kan per platform verschillen. Low-level moeten over het algemeen alleen worden gebruikt voor aangepaste implementaties van widgets.

High-level events

Eventtype

Beschrijving

Activate, Deactivate Een besturingselement wordt geactiveerd of gedeactiveerd.
Arm Een menuoptie wordt geselecteerd en kan worden gekozen.
Close Een shell wordt gesloten (aangevraagd door de vensterbeheerder).
DefaultSelection Een item wordt geselecteerd door het oproepen van een standaardselectie-actie, door bijvoorbeeld te drukken op Enter of te dubbelklikken op een rij in een tabel.
Dispose Een widget wordt ontkoppeld (met code of door de gebruiker).
DragDetect Een mogelijke sleepbewerking is gestart.
EraseItem De achtergrond van een TableItem of TreeItem staat op het punt te worden getekend.
Expand, Collapse Een item in een boomstructuur wordt uit- of samengevouwen.
Help De gebruiker heeft om ondersteuning gevraagd bij een widget. Dit gebeurt bijvoorbeeld wanneer in Windows op F1 wordt gedrukt.
Iconify, Deiconify Een shell wordt geminimaliseerd, gemaximaliseerd of hersteld.
MeasureItem De grootte van een aangepaste TableItem of TreeItem wordt opgevraagd.
MenuDetect Een voorgrondmenu wordt opgevraagd.
Modify De tekst van een widget is gewijzigd.
Move, Resize De positie of het formaat van een besturingselement is gewijzigd, met code of door de gebruiker.
PaintItem De voorgrond van een TableItem of TreeItem staat op het punt te worden getekend.
Selection De gebruiker selecteert een item in het besturingselement, bijvoorbeeld door één keer te klikken op een rij in een tabel of met het toetsenbord door de items te navigeren.
SetData Voor virtuele tabellen moeten gegevens worden ingesteld in een tabelitem.
Settings Een eigenschap van het besturingssysteem, zoals een systeemlettertype of -kleur, is gewijzigd.
Show, Hide Een besturingselement wordt afgebeeld of verborgen.
Traverse De gebruiker probeert het besturingselement te verlaten met behulp van een toetsaanslag. De toetsen Escape of Tab kunnen hiervoor bijvoorbeeld worden gebruikt.
Verify De tekst van een widget wordt gewijzigd. Met deze event kan de tekstwijziging worden bewerkt of geannuleerd voordat deze wordt doorgevoerd.

Low-level events

Eventtype

Beschrijving

FocusIn, FocusOut Een besturingselement heeft de focus gekregen of verloren.
KeyDown, KeyUp Een toets is ingedrukt of losgelaten terwijl een besturingselement de focus had.
MouseDown, MouseUp, MouseDoubleClick De muis is ingedrukt of losgelaten of er is gedubbelklikt met de muis terwijl een besturingselement de focus had.
MouseMove De muis is over een besturingselement bewogen.
MouseEnter, MouseExit, MouseHover De muis is in een besturingselement geplaatst, uit een besturingselement verplaatst of over een besturingselement bewogen.
MouseWheel Aan het muiswiel is gedraaid.
Paint Een besturingselement is beschadigd en moet opnieuw worden opgebouwd.

Events zonder type

STW biedt naast de bovenstaande events met een type ook ondersteuning voor low-level widgetevents zonder type. Door middel van een constant wordt het type van de event bepaald en wordt een generieke listener gedefinieerd. De listener kan nog steeds verschillende events van elkaar onderscheiden. In het volgende fragment wordt een generieke eventafhandelingsroutine gedefinieerd en worden diverse listeners aan een shell toegevoegd.

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