Hendelser

Når vi har opprettet en visning og widgeter og deretter starter applikasjonens meldingssløyfe, hvor blir da arbeidet egentlig utført? Det utføres hver gang en hendelse leses fra køen og tildeles en widget. Det meste av applikasjonslogikken implementeres som svar på brukerhendelser.

Hovedmønsteret er at du legger til en lytter i en widget som du har opprettet. Når den aktuelle hendelsen oppstår, utløses lytterkoden. Dette enkle eksempelet er hentet 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 lyttertype finnes et grensesnitt som definerer lytteren (XyzListener), en klasse som inneholder hendelseinformasjonen (XyzEvent) og en grensesnittmetode som legger til lytteren (addXyzListener). Hvis det er definert mer enn en metode i lyttergrensesnittet, finnes en adapter (XyzAdapter) som implementerer lyttergrensesnitt og oppgir tomme metoder. Alle hendelser, lyttere og adaptere defineres i pakken org.eclipse.swt.events.

Følgende tabell viser hvilke hendelser som er tilgjengelige og hvilke widgeter som støtter de ulike hendelsene. Hendelsene kan deles inn i to hovedkategorier: hendelser på høyt nivå, som representerer en logisk operasjon i en kontroll, og hendelser på lavt nivå, som beskriver mer spesifikke brukerinteraksjoner. Hendelser på høyt nivå kan representeres av flere hendelser på lavt nivå, hvilke dette er varierer fra plattform til plattform. Hendelser på lavt nivå skal vanligvis bare brukes ved tilpassede widget-implementeringer.

Hendelser på høyt nivå

Hendelsestype

Beskrivelse

Activate, Deactivate Genereres når en kontroll aktiveres eller deaktiveres.
Arm En MenuItem utheves og er klar til å velges.
Close Et skall er i ferd med å lukkes på bakgrunn av en forespørsel fra vindusstyreren.
DefaultSelection Brukeren velger et element ved å aktivere en standardvalghandling. Dette skjer for eksempel når brukeren trykker på Enter eller dobbeltklikker på en rad i en tabell.
Dispose En widget er i ferd med å bli slettet, enten av programmet eller av brukeren.
DragDetect Brukeren har startet en mulig draoperasjon.
EraseItem En TableItem eller TreeItem skal til å få tegnet opp bakgrunnen.
Expand, Collapse Et element i et tre utvides eller komprimeres.
Help Brukeren har bedt om hjelp med en widget. Dette skjer for eksempel når brukeren trykker på F1 i Windows.
Iconify, Deiconify Et skall er minimert, maksimert eller gjenopprettet.
MeasureItem Det spørres om størrelsen på en tilpasset opptegning av TableItem eller TreeItem.
MenuDetect Brukeren har bedt om en hurtigmeny.
Modify Teksten i widgeten er endret.
Move, Resize En kontroll har endret posisjon eller størrelse, og dette er enten gjort av programmet eller brukeren.
PaintItem En TableItem eller TreeItem skal til å få tegnet opp forgrunnen.
Selection Brukeren velger et element i kontrollen. Dette skjer for eksempel når brukeren klikker en gang på en rad i en tabell eller navigerer seg gjennom elementene på tastaturet.
SetData Det må angis data i en TableItem når det blir brukt en virtuell tabell.
Settings En operativsystemegenskap, f.eks. en systemfont eller -farge, er endret.
Show, Hide Synligheten for en kontroll er endret.
Traverse Brukeren forsøker å gå ut av kontrollen gjennom et tasttrykk. Her brukes for eksempel Escape-tasten eller tabulatortastene.
Verify Teksten i en widget er i ferd med å bli endret. Denne hendelsen gjør det mulig for applikasjonen å endre teksten eller forhindre endringen.

Hendelser på lavt nivå

Hendelsestype

Beskrivelse

FocusIn, FocusOut Fokuset av en kontroll er aktivert eller deaktivert.
KeyDown, KeyUp Brukeren har trykt ned eller sluppet opp en tast på tastaturet når kontrollen har tastaturfokus.
MouseDown, MouseUp, MouseDoubleClick Brukeren har trykt på, sluppet opp eller dobbeltklikket med musen på kontrollen.
MouseMove Brukeren har flyttet musen over kontrollen.
MouseEnter, MouseExit, MouseHover Musen har gått inn i, avsluttet eller pekt over kontrollen.
MouseWheel Musehjulet er rotert.
Paint Kontrollen er skadet og må fargelegges på nytt.

Hendelser som ikke gjelder inntasting

I tillegg til inntastingshendelsene som er beskrevet ovenfor, støtter SWT widget-hendelser på lavt nivå som ikke omfatter inntasting. Disse mekanismene støtter seg til en konstant for å identifisere hendelsestypen og definerer en generisk lytter som oppgis med denne konstanten. Dette gjør det mulig for lytteren å implementere en "case style"-lytter. I snutten nedenfor definerer vi en generisk hendelsesbehandler og legger til flere lyttere i et skall.

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