Ha létrehozta a kijelzőt és néhány felületi elemet, és elindította az alkalmazás üzenetciklusát, akkor hol történik a valós munka? Ez akkor történik, amikor az esemény kiolvasására kerül és átkerül a felületi elemhez. Az alkalmazáslogika nagy része a felhasználói eseményekre válaszul kerül megvalósításra.
Az alapminta az, hogy hozzáad egy figyelőt néhány vezérlőelemhez, és a megfelelő esemény bekövetkezésekor a figyelőkód végrehajtásra kerül. Ez az egyszerű példa az org.eclipse.swt.examples.helloworld.HelloWorld3 elemből származik:
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 ()); } });
Minden típusú figyelőhöz létezik egy felület, amely megadja a figyelőt (XyzListener), egy osztályt, amely biztosítja az eseményinformációkat (XyzEvent), és egy API metódus a figyelő hozzáadásához (addXyzListener). Ha több metódus van megadva a figyelőfelületen, akkor a figyelőfelületet megvalósító és az üres metódusokat biztosító adapter (XyzAdapter) is biztosított. Az összes esemény, figyelő és adapter az org.eclipse.swt.events csomagban van megadva.
Az alábbi táblázatok összefoglalják a rendelkezésre álló eseményeket és az eseményeket támogató felületi elemeket. Az események két általános kategóriába sorolhatók: magasszintű események, amelyek egy logikai műveletet ábrázolnak a vezérlőelemen, és alacsonyszintű események, amelyek specifikusabb felhasználói interakciókat írnak le. A magasszintű események több alacsonyszintű eseménnyel ábrázolhatók, amelyek platformonként különbözhetnek. Az alacsonyszintű események csak egyéni felületi elem megvalósításokhoz használhatók.
Eseménytípus |
Leírás |
---|---|
Activate, Decativate | Egy vezérlőelem aktiválásakor vagy letiltásakor kerül előállításra. |
Arm | A MenuItem élesítve van (ki van jelölve és kiválasztásra készen áll). |
Close | A parancsértelmező bezárásra kerül, amint az ablakkezelő kéri. |
DefaultSelection | A felhasználó egy alapértelmezett kiválasztási művelet meghívásával kiválaszt egy elemet. Például az Enter megnyomásával vagy dupla kattintással a táblázat egyik sorára. |
Dispose | A programozási eljárással vagy felhasznál által eltávolítandó felületi elem. |
DragDetect | A felhasználó kezdeményezett egy lehetséges húzás műveletet. |
Expand, Collapse | A fa egyik eleme kibontásra vagy összehúzásra került. |
Help | A felhasználó súgót kért egy felületi elemhez. Ez Windows alatt például az F1 billentyű megnyomásakor történik. |
Iconify, Deiconify | A parancsértelmező minimálisra csökkentett, maximálisra növelt vagy visszaállított. |
MenuDetect | A felhasználó egy előugró menüt kért. |
Modify | A felületi elem szövege módosítva lett. |
Move, Resize | A vezérlőelem pozíciója vagy mérete módosítva lett, programozási eljárással vagy a felhasználó által. |
Selection | A felhasználó a vezérlőelemen kiválaszt egy elemet. Például a táblázat egyik sorára kattintva vagy az elemek közötti billentyűzet-navigációval. |
SetData | Virtuális táblázat használata esetén a TableItemen beállítandó adatok. |
Show, Hide | A vezérlőelem láthatósága megváltozott. |
Traverse | A felhasználó egy billentyűleütéssel megpróbálja kivonni magát a vezérlés alól. Ehhez például az esc vagy tab billentyű használható. |
Verify | A felületi elem szövege módosításra kerül. Ez az esemény lehetővé teszi az alkalmazás számára a szöveg módosítását vagy a módosítás megakadályozását. |
Eseménytípus |
Leírás |
---|---|
FocusIn, FocusOut | A fókuszt megadta vagy elvette a rendszer. |
KeyDown, KeyUp | A felhasználó lenyomott vagy felengedett egy billentyűt, amikor a vezérlőelem billentyűzetfókusszal rendelkezett. |
MouseDown, MouseUp, MouseDoubleClick | A felhasználó megnyomta, felengedte vagy duplán kattintott az egérgombbal a vezérlőelemen. |
MouseMove | A felhasználó a vezérlőelemre mozgatta az egeret. |
MouseEnter, MouseExit, MouseHover | Az egér belépett, kilépett a vezérlőelemből, illetve fölötte lebeg. |
MouseWheel | Az egérgörgő elforgatásra került. |
Paint | A vezérlőelem sérült és újrafestést igényel. |
A fent leírt típusos eseményeken felül az SWT alacsony szintű, nem típusos felületi elem eseménymechanizmust is támogat. A nem típusos mechanizmus egy eseménytípust azonosító konstansra épül, és megad egy általános figyelőt, amelyet a konstanshoz biztosítanak. Ennek segítségével a figyelő megvalósíthat egy "esetstílus"-figyelőt. Az alábbi részletben megadunk egy általános eseménykezelőt és számos figyelőt adunk hozzá egy parancsértelmezőhöz.
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);