Aktiviteter

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.

Aktiviteter på højt niveau

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.

Aktiviteter på lavt niveau

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.

Aktiviteter uden type

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