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.
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. |
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. |
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);