Události

Kde se odehrává skutečná práce, jakmile vytvoříme zobrazení a nějaké prvky widget a spustíme smyčku zpráv aplikace? Odehrává se vždy, když se přečte událost z fronty a odbaví se do prvku widget. Většina logiky aplikace je implementována jako odezva na události uživatele.

Základní vzorec je takový, že přidáte listener k některým prvkům widget, které jste vytvořili, a když dojde k odpovídající události, provede se kód listeneru. Tento jednoduchý příklad je převzatý z 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 ());
      }
   });

Pro každý typ listeneru existuje rozhraní, které definuje listener (XyzListener), třídu, která poskytuje informace o události (XyzEvent), a API metodu, která se má přidat k listeneru (addXyzListener). Pokud je v rozhraní listeneru definována více než jedna metoda, bude zde rovněž adaptér (Xyzadaptér) implementující rozhraní listeneru a obsahující prázdné metody. Všechny události, listenery a adaptéry jsou definovány v balíčku org.eclipse.swt.events.

Následující tabulky shrnují dostupné události a prvky widget, které každou událost podporují. Události mohou být rozděleny do dvou obecných kategorií: vysokoúrovňové události představují logickou operaci obslužného prvku, zatímco nízkoúrovňové události poskytují přesnější popis interakcí uživatele. Vysokoúrovňové události mohou být reprezentovány několika nízkoúrovňovými událostmi, které se mohou pro jednotlivé platformy odlišovat. Nízkoúrovňové události by měly být v obecném případě používány pouze k implementaci uživatelských prvků widget.

Vysokoúrovňové události

Typ události

Popis

Activate, Decativate Generuje se při aktivaci nebo deaktivaci obslužného prvku.
Arm Položka MenuItem je aktivována (zvýrazněna a připravena k vybrání).
Close Interpret textové konzoly se uzavírá na základě požadavku správce oken.
DefaultSelection Uživatel vybírá položku spuštěním akce výchozí výběr. Tj. například stisknutím Enter nebo poklepáním na řádek tabulky.
Dispose Prvek widget lze zlikvidovat programem nebo zásahem uživatele.
DragDetect Uživatel zahájil možnou operaci přetažení myší.
Expand, Collapse Položka stromové struktury se rozbaluje a sbaluje.
Help Uživatel vyžádal nápovědu pro prvek widget. Například ve Windows k tomu dochází při stisknutí klávesy F1.
Iconify, Deiconify Došlo k minimalizaci, maximalizaci či obnovení okna interpretu textové konzoly.
MenuDetect Uživatel vyžádal kontextovou nabídku.
Modify Došlo k úpravě textu prvku widget.
Move, Resize Zásahem programu či uživatele došlo ke změně polohy nebo velikosti obslužného prvku.
Selection Uživatel zvolil položku v obslužném prvku. Tj. například jednoduchým klepnutím myší do řádku tabulky nebo procházením položek klávesnicí.
SetData Při použití virtuální tabulky je zapotřebí nastavit data v TableItem.
Show, Hide Změna viditelnosti obslužného prvku.
Traverse Uživatel se pokouší procházet obslužnými prvky klávesnicí. K procházení se používají například klávesy Escape a Tab.
Verify Změna textu prvku widget. Tato událost poskytuje aplikaci možnost změnit text nebo zamezit úpravě textu.

Nízkoúrovňové události

Typ události

Popis

FocusIn, FocusOut Obslužný prvek získal nebo ztratil fokus.
KeyDown, KeyUp Uživatel stisknul nebo uvolnil klávesu v situaci, kdy má obslužný prvek fokus klávesnice.
MouseDown, MouseUp, MouseDoubleClick Uživatel stisknul nebo uvolnil tlačítko myši nebo poklepal myší na obslužný prvek.
MouseMove Uživatel posunul kurzor myši na obslužný prvek.
MouseEnter, MouseExit, MouseHover Kurzor myši se posunul na obslužný prvek, opustil obslužný prvek, nebo se posouvá nad obslužným prvkem.
MouseWheel Došlo k pootočení kolečka myši.
Paint Obslužný prvek byl poškozen a vyžaduje překreslení.

Nezadané události

Kromě výše uvedeného systému událostí klávesnice SWT podporují mechanizmus nezadaných nízkoúrovňových událostí prvků widget. Nezadaný mechanizmus se spoléhá na konstantu pro identifikaci typu události a definuje obecný listener, který je dodán s touto konstantou. To umožňuje listeneru implementovat listener "case style". V následujícím úseku kódu definujeme obecného správce událostí a přidáme k nadstavbě několik listenerů.

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