Kun display-luokka ja widget-objekteja on luotu ja sovelluksen sanomasilmukka käynnistetty, varsinaisten töiden tekeminen alkaa. Näin käy aina, kun tapahtuma luetaan jonosta ja välitetään widget-objektiin. Suurin osa sovelluksen logiikasta toteutetaan vastauksina käyttäjän tapahtumiin.
Perusmallia käytettäessä luotuun widget-objektiin lisätään kuuntelutoiminto, ja kun sopiva toiminto ilmenee, kuuntelutoiminnon koodi suoritetaan. Seuraava esimerkki on mukautettu kohteesta 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 ()); } });
Kutakin kuuntelutoiminnon lajia varten on kuuntelutoiminnon määrittävä käyttöliittymä (XyzListener), tapahtumatietoja toimittava luokka (XyzEvent) ja kuuntelutoiminnon lisäävä ohjelmointirajapinnan metodi (addXyzListener). Jos kuuntelutoiminnon käyttöliittymässä on määritetty useita metodeja, käytössä on myös sovitin (XyzAdapter), joka toteuttaa kuuntelutoiminnon käyttöliittymän ja toimittaa tyhjiä metodeja. Kaikki tapahtumat, kuuntelutoiminnot ja sovittimet on määritetty pakkauksessa org.eclipse.swt.events.
Seuraavissa taulukoissa on tiivistelmä käytettävissä olevista tapahtumista sekä kutakin tapahtumaa tukevista widget-objekteista. Tapahtumat voidaan jakaa kahteen yleiskategoriaan: ylätason tapahtumat esittävät ohjausobjektiin liittyvää loogista operaatiota ja alatason tapahtumat kuvaavat tätä yleisempiä käyttäjän toimia. Useat alatason tapahtumat saattavat esittää ylätason tapahtumia, ja alatason tapahtumat saattavat olla erilaisia eri käyttöympäristöissä. Alatason tapahtumia tulee yleensä käyttää vain mukautettujen widget-objektien toteutuksessa.
Tapahtumalaji |
Kuvaus |
---|---|
Activate, Deactivate | Tämä luodaan, kun ohjausobjekti otetaan käyttöön tai poistetaan käytöstä. |
Arm | MenuItem-objekti on määritetty valittavaksi (korostettu ja valmis valittavaksi). |
Close | Komentoliittymä sulkeutuu ikkunoiden hallintatoiminnon pyynnön mukaan. |
DefaultSelection | Käyttäjä valitsee kohteen kutsumalla valinnan oletustoimintoa, esimerkiksi painamalla Enter-näppäintä tai kaksoisnapsauttamalla taulukon riviä. |
Dispose | Widget-objekti poistetaan joko ohjelmallisesti tai käyttäjä poistaa sen. |
DragDetect | Käyttäjä on aloittanut mahdollisen vetotoimen. |
EraseItem | TableItem- tai TreeItem-kohteen tausta piirretään. |
Expand, Collapse | Rakenteessa oleva kohde on suurennettu tai pienennetty. |
Help | Käyttäjä on pyytänyt widget-objektin ohjetta. Tämä ilmenee esimerkiksi, kun Windows-käyttöjärjestelmässä painetaan F1-näppäintä. |
Iconify, Deiconify | Komentoliittymä on pienennetty, suurennettu tai palautettu. |
MeasureItem | Mukautetusti piirrettyä TableItem- tai TreeItem-kohdetta piirretään. |
MenuDetect | Käyttäjä on pyytänyt pikavalikkoa. |
Modify | Widget-objektin tekstiä on muokattu. |
Move, Resize | Ohjausobjektin sijaintia tai kokoa on muutettu joko ohjelmallisesti tai käyttäjä on tehnyt sen. |
PaintItem | TableItem- tai TreeItem-kohteen edusta piirretään. |
Selection | Käyttäjä valitsee ohjausobjektin kohteen esimerkiksi napsauttamalla kerran taulukon riviä tai siirtymällä näppäimistöllä kohteesta toiseen. |
SetData | Tiedot on määritettävä TableItem-ohjausobjektiin, kun käytössä on näennäistaulukko. |
Settings | Käyttöjärjestelmän ominaisuutta, esimerkiksi järjestelmän fonttia tai väriä, on muutettu. |
Show, Hide | Ohjausobjektin näkyvyys on muuttunut. |
Traverse | Käyttäjä yrittää siirtyä pois ohjausobjektista näppäimen painalluksella painamalla esimerkiksi Esc-näppäintä tai sarkainta. |
Verify | Widget-objektin tekstiä muokataan. Tämä tapahtuma antaa sovellukselle mahdollisuuden muuttaa tekstiä tai estää muutoksen. |
Tapahtumalaji |
Kuvaus |
---|---|
FocusIn, FocusOut | Tarkennus on siirtynyt ohjausobjektiin tai poistunut ohjausobjektista. |
KeyDown, KeyUp | Käyttäjä on painanut näppäimistön näppäintä tai vapauttanut näppäimen, kun näppäimistö on kohdistettu ohjausobjektiin. |
MouseDown, MouseUp, MouseDoubleClick | Käyttäjä on painanut hiiren painiketta, vapauttanut hiiren painikkeen tai kaksoisnapsauttanut hiirtä ohjausobjektin päällä. |
MouseMove | Käyttäjä on liikuttanut hiirtä ohjausobjektin päällä. |
MouseEnter, MouseExit, MouseHover | Hiiri on siirtynyt ohjausobjektiin tai poistunut ohjausobjektista, tai hiirtä on pidetty ohjausobjektin päällä. |
MouseWheel | Rullahiiren rullaa on käännetty. |
Paint | Ohjausobjekti on vaurioitunut, ja se on maalattava uudelleen. |
Edellä kuvatun tyypitetyn tapahtumajärjestelmän lisäksi SWT-ympäristö tukee myös alatason tyypitöntä widget-tapahtumien mekanismia. Tyypitön mekanismi käyttää vakiota, joka yksilöi tapahtuman tyypin ja määrittää vakion mukana toimitettavan yleisen kuuntelutoiminnon. Tällöin kuuntelutoiminto voi toteuttaa case-tyylin kuuntelutoiminnon. Seuraavassa koodikatkelmassa määritetään yleinen tapahtumien käsittelytoiminto ja lisätään komentoliittymään useita kuuntelutoimintoja.
Shell shell = new Shell (); Listener listener = new Listener () { public void handleEvent (Event e) { switch (e.type) { case SWT.Resize: System.out.println ("Koon muutos vastaanotettu"); break; case SWT.Paint: System.out.println ("Maalaus vastaanotettu"); break; default: System.out.println ("Tuntematon tapahtuma vastaanotettu"); } } }; shell.addListener (SWT.Resize, listener); shell.addListener (SWT.Paint, listener);