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