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