Når vi har oprettet en fremvisning (display) og nogle elementer, og starter programmets meddelelsesløkke, hvor finder så det rigtige arbejde sted? Det finder sted, hver gang en aktivitet læses fra køen og afsendes til et element. Det meste af programlogikken implementeres som svar på brugeraktiviteter.
Det grundlæggende mønster er, at du tilføjer en lytter til et element, du har oprettet, og når den relevante aktivitet finder sted, udføres lytterkoden. Dette simple eksempel er tilpasset fra 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 ()); } });
For hver type lytter er der en grænseflade, der definerer lytteren (XyzListener), en klasse, der leverer aktivitetsoplysninger (XyzEvent), og en API-metode, der tilføjer lytteren (addXyzListener). Hvis der er mere end én metode defineret i lyttergrænsefladen, er der en adapter (XyzAdapter), der implementerer lyttergrænsefladen og leverer tomme metoder. Alle aktiviteter, lyttere og adaptere er defineret i pakken org.eclipse.swt.events.
Følgende tabeller opsummerer de aktiviteter, der er tilgængelige, og de elementer, der understøtter de enkelte aktiviteter. Aktiviteter kan opdeles i to generelle kategorier: aktiviteter på højt niveau, som repræsenterer en logisk funktion på en kontrol, og aktiviteter på lavt niveau, som beskriver mere specifikke brugerinteraktioner. Aktiviteter på højt niveau kan repræsenteres af flere aktiviteter på lavt niveau, som kan være forskellige fra platform til platform. Aktiviteter på lavt niveau bør generelt kun bruges til tilpassede elementimplementeringer.
Aktivitetstype |
Beskrivelse |
---|---|
Aktivér, Deaktivér | Genereres, når en kontrol aktiveres eller deaktiveres. |
Arm | Et MenuItem slås til (fremhæves og er klar til at blive valgt). |
Close | En shell er ved at lukke efter anmodning fra vinduesstyringen. |
DefaultSelection | Brugeren vælger et element ved at starte en standardvalgfunktion, f.eks. ved at trykke på Enter eller klikke på en række i en tabel. |
Dispose | Et element er ved at blive kasseret, enten via programmet eller via brugeren. |
DragDetect | Brugeren har igangsat en mulig trækkefunktion. |
EraseItem | Et TableItem eller TreeItem er ved at få tegnet sin baggrund. |
Expand, Collapse | Et element i en træstruktur udvides eller skjules. |
Hjælp | Brugeren har anmodet om hjælp til et element. Dette sker f.eks., når brugeren trykker på F1 i Windows. |
Iconify, Deiconify | En shell er minimeret, maksimeret eller gendannet. |
MeasureItem | Der er rettet forespørgsel om størrelsen af et brugertegnet TableItem eller TreeItem. |
MenuDetect | Brugeren har anmodet om en kontekstmenu. |
Modify | Elementets tekst er ændret. |
Move, Resize | En kontrol er flyttet, eller dens størrelse er tilpasset, enten via programmet eller via brugeren. |
PaintItem | Et TableItem eller TreeItem er ved at få tegnet sin forgrund. |
Selection | Brugeren vælger et element i kontrollen, f.eks. ved at enkeltklikke i en række i en tabel eller ved at flytte gennem elementerne vha. tastaturet. |
SetData | Data skal angives på et TableItem, når der anvendes en virtuel tabel. |
Settings | En egenskab for styresystem, f.eks. farven på en systemfont, er ændret. |
Show, Hide | En kontrols synlighed er ændret. |
Traverse | Brugeren forsøger at komme ud af en kontrol vha. et tasttryk. Eksempelvis bruges Escape- eller Tab-tasterne til dette. |
Verify | Et elements tekst er ved at blive ændret. Denne aktivitet giver programmet en chance for at ændre teksten eller forhindre ændring. |
Aktivitetstype |
Beskrivelse |
---|---|
FocusIn, FocusOut | En kontrol har modtaget eller mistet fokus. |
KeyDown, KeyUp | Brugeren har trykket på eller sluppet en tast, mens kontrollen har tastaturfokus. |
MouseDown, MouseUp, MouseDoubleClick | Brugeren har trykket på, sluppet eller dobbeltklikket på musen hen over kontrollen. |
MouseMove | Brugeren har flyttet musen hen over kontrollen. |
MouseEnter, MouseExit, MouseHover | Musen er gået ind i, gået ud af, eller har peget på kontrollen. |
MouseWheel | Der er drejet på musehjulet. |
Paint | Kontrollen er ødelagt og kræver gendannelse. |
Ud over ovennævnte aktivitetstyper understøtter SWT en elementaktivitetsmekanisme på lavt niveau, der ikke har nogen type. Mekanismen uden type anvender en konstant til at identificere aktivitetstypen og definerer en generisk lytter, der følger med konstanten. Herved kan lytteren implementere en "case-agtig" lytter. I følgende kodestykke definerer vi en generisk aktivitetsbehandler og tilføjer flere lyttere til en shell.
Shell shell = new Shell (); Listener listener = new Listener () { public void handleEvent (Event e) { switch (e.type) { case SWT.Resize: System.out.println ("Tilpas størrelse modtaget"); break; case SWT.Paint: System.out.println ("Maling modtaget"); break; default: System.out.println ("Ukendt aktivitet modtaget"); } } }; shell.addListener (SWT.Resize, listener); shell.addListener (SWT.Paint, listener);