Tapahtumat

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.

Ylätason tapahtumat

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.

Alatason tapahtumat

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.

Tyypittömät tapahtumat

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