Eventi

Dopo aver creato una visualizzazione e dei widget e aver avviato il ciclo di messaggi dell'applicazione, le operazioni si svolgono effettivamente ogni volta che un evento viene letto dalla coda e distribuito a un widget. La maggior parte della logica applicativa viene implementata in risposta agli eventi dell'utente.

Il modello base prevede l'aggiunta di un listener ad un widget creato e l'esecuzione del listener quando si verifica l'evento appropriato. Il semplice esempio che segue è stato adattato da 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 ());
      }
   });

Per ogni tipo di listener, è disponibile un'interfaccia che definisce il listener (XyzListener), una classe che fornisce informazioni sull'evento (XyzEvent) e un metodo API per l'aggiunta del listener (addXyzListener). In presenza di più metodi definiti nell'interfaccia del listener, viene fornito anche un adattatore (XyzAdapter) che implementa l'interfaccia del listener e fornisce metodi vuoti. Tutti gli eventi, i listener e gli adattatori sono definiti nel pacchetto org.eclipse.swt.events.

Nelle seguenti tabelle sono riassunti gli eventi disponibili e i widget che li supportano. Gli eventi possono essere suddivisi in due categorie generali: eventi di alto livello che rappresentano un'operazione logica su un controllo e eventi di basso livello che descrivono interazioni utente più specifiche. Gli eventi di alto livello possono essere rappresentati da più eventi di basso livello, che possono essere differenti in base alla piattaforma. Gli eventi di basso livello dovrebbero essere utilizzati solo per implementazioni di widget personalizzati.

Eventi di alto livello

Tipo di evento

Descrizione

Activate, Deactivate Generato quando un controllo viene attivato o disattivato.
Arm Un MenuItem viene preparato per le funzioni (evidenziato e pronto per essere selezionato).
Close Una Shell sta per essere chiusa, su richiesta del gestore finestre.
DefaultSelection L'utente seleziona un elemento richiamando un'azione di selezione predefinita. Ad esempio, premendo Invio o facendo doppio clic su una riga di una tabella.
Dispose Un widget sta per essere eliminato, mediante programmazione o dall'utente.
DragDetect L'utente ha avviato una possibile operazione di trascinamento.
Expand, Collapse Un elemento di una struttura ad albero viene espanso o compresso.
Help L'utente ha richiesto la guida per un widget. Ad esempio, si verifica quando si preme il tasto F1 in Windows.
Iconify, Deiconify Una Shell è stata ridotta a icona, ingrandita o ripristinata.
MenuDetect L'utente ha richiesto un menu di scelta rapida.
Modify Il testo del widget è stato modificato.
Move, Resize Un controllo è stato spostato o ridimensionato, mediante programmazione o dall'utente.
Selection L'utente ha selezionato un elemento del controllo. Ad esempio, facendo clic su una riga di una tabella o spostandosi tra gli elementi mediante tastiera.
SetData I dati devono essere impostati su un TableItem quando si utilizza una tabella virtuale.
Show, Hide La visibilità di un controllo è stata modificata.
Traverse L'utente cerca di uscire dal controllo utilizzando un tasto. Ad esempio, i tasti escape o tab.
Verify Il testo di un widget sta per essere modificato. Questo evento dà all'applicazione la possibilità di alterare il testo o di impedire la modifica.

Eventi di basso livello

Tipo di evento

Descrizione

FocusIn, FocusOut Un controllo è stato attivato o disattivato.
KeyDown, KeyUp L'utente ha premuto o rilasciato un tasto mentre il controllo è attivo per la tastiera.
MouseDown, MouseUp, MouseDoubleClick L'utente ha premuto, rilasciato o fatto doppio clic sul controllo.
MouseMove L'utente ha spostato il mouse sul controllo.
MouseEnter, MouseExit, MouseHover Il mouse è entrato, uscito o passato su un controllo.
MouseWheel La rotellina del mouse è stata girata.
Paint Il controllo è stato danneggiato e deve essere tracciato di nuovo.

Eventi non tipizzati

Oltre al sistema di eventi tipizzati sopra illustrato, SWT supporta un meccanismo di eventi widget non tipizzati di basso livello. Il meccanismo non tipizzato utilizza una costante per identificare il tipo di evento e definisce un listener generico fornito con tale costante. In questo modo il listener può implementare un listener "case style". Nel seguente frammento viene definito un gestore di eventi generici e vengono aggiunti diversi listener a una shell.

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