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