Händelser

När vi har skapat en visning och vissa gränssnittskontroller, och därefter startar upp tillämpningens meddelandeloop, var utförs själva arbetet? Det utförs varje gång en händelse läses från kön och vidarebefordras till en gränssnittskontroll. Viss tillämpningslogik implementeras som svar på användarhändelser.

Det grundläggande mönstret är att du lägger till en lyssnare i någon gränssnittskontroll som du har skapat. När lämplig händelse inträffar körs lyssnarkoden. Det här enkla exemplet har anpassats från 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 ());
      }
   });

För varje typ av lyssnare finns ett gränssnitt som definierar lyssnaren (XyzListener), en klass som ger händelseinformation (XyzEvent) och en API-metod som lägger till lyssnaren (addXyzListener). Om det finns flera metoder definierade i lyssnargränssnittet finns en adapter (XyzAdapter) som implementerar lyssnargränssnittet och tillhandahåller tomma metoder. Alla händelserna, lyssnarna och adaptrarna definieras i paketet org.eclipse.swt.events.

I följande tabeller sammanfattas de tillgängliga händelserna och de gränssnittskontroller som kan hantera aktuell händelse. Händelser kan delas upp i två allmänna kategorier: högnivåhändelser som representerar en logisk operation för en kontroll och lågnivåhändelser som beskriver mer specifika användarinteraktioner. Högnivåhändelser kan representeras av flera lågnivåhändelser, vilka kan vara olika på olika plattformar. Lågnivåhändelser bör vanligen användas för implementationer av anpassade gränssnittskontroller.

Högnivåhändelser

Händelstyp

Beskrivning

Activate, Deactivate Skapas när en kontroll aktiveras eller avaktiveras.
Arm En MenuItem är beväpnad (markerad och klar för val).
Close Ett skal håller på att stängas på begäran av fönsterhanteraren.
DefaultSelection Användaren väljer ett objekt genom att anropa en standardurvalsåtgärd. Exempelvis trycka på Enter eller genom att dubbelklicka på en tabellrad.
Dispose En gränssnittskontroll håller på att tas bort, av program eller användare.
DragDetect Användaren har intierat en möjlig dragåtgärd.
EraseItem Bakgrunden till ett TableItem eller TreeItem kommer att ritas.
Expand, Collapse Ett objekt i ett träd har expanderats eller komprimerats.
Help Användaren har begärt hjälp för en gränssnittskontroll. Detta inträffar till exempel när du trycker på F1 i Windows.
Iconify, Deiconify Ett skal har minimerats, maximerats eller återställts.
MeasureItem Storleken på ett anpassat TableItem eller TreeItem begärs.
MenuDetect Användaren har begärt en kontextmeny.
Modify Texten i gränssnittskontrollen har ändrats.
Move, Resize En kontroll har bytt position eller ändrat storlek, antingen av program eller av användare.
PaintItem Förgrunden till ett TableItem eller TreeItem kommer att ritas.
Selection Användaren väljer ett objekt i kontrollen, exempelvis genom att klicka på en rad i en tabell eller genom att navigera mellan objekten med hjälp av tangentbordet.
SetData Data behöver anges i ett TableItem när en virtuell tabell används.
Inställningar En operativsystemsegenskap, till exempel ett teckensnitt eller en färg, har ändrats.
Show, Hide Synligheten har ändrats för en kontroll.
Traverse Användaren försöker stega ut från kontrollen med hjälp av en tangenttryckning. Exempelvis används Escape- och tabbtangenterna för stegning.
Verify Texten i gränssnittskontrollen håller på att ändras. Den här händelsen ger tillämpningen en chans att ändra texten eller att förhindra ändringen.

Lågnivåhändelser

Händelstyp

Beskrivning

FocusIn, FocusOut En kontroll har hittat eller tappat fokus.
KeyDown, KeyUp Användaren har tryckt på eller släppt en tangent när kontrollen har tangentbordsfokus.
MouseDown, MouseUp, MouseDoubleClick Användaren har tryckt på, släppt eller dubbelklickat med musen på kontrollen.
MouseMove Användaren har rört musen ovanför kontrollen.
MouseEnter, MouseExit, MouseHover Musen har gått in i, gått ut ur eller svävat över kontrollen.
MouseWheel Mushjulet har roterats.
Paint Kontrollen har ändrats och behöver ritas om.

Otypade händelser

Förutom det typade händelsesystem som beskrivs ovan kan SWT hantera en lågnivå, otypad mekanism för gränssnittskontrollhändelser. Den otypade mekanismen förlitar sig på en konstant för att identifiera händelsetypen och definierar en generisk lyssnare som tillhandahålls med konstanten. Lyssnaren kan då implementera en "casestils"lyssnare. I följande kodstycke definierar vi en generisk händelsehanterare och lägger till flera lyssnare i ett skal.

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