Eventi

Dopo aver creato una visualizzazione e dei widget e aver avviato il ciclo di messaggi dell'applicazione, dove si svolgono le operazioni reali? Ciò avviene 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.

Nella seguente tabella sono riassunti gli eventi disponibili e i widget che li supportano.

Tipo di evento

Descrizione

Widget

Arm

Generato quando un widget, ad esempio una voce di menu, viene dotato di funzioni.

MenuItem

Control

Generato quando un controllo viene spostato o ridimensionato.

Control, TableColumn, Tracker

Dispose

Generato quando un widget viene eliminato mediante programmazione o dall'utente.

Widget

Focus

Generato quando un controllo viene attivato o disattivato.

Control

Help

Generato quando l'utente richiede il supporto della Guida per un widget, ad esempio premendo il tasto F1.

Control, Menu, MenuItem

Tasto

Generato quando l'utente preme o rilascia un tasto mentre il controllo è attivo sulla tastiera.

Control

Menu

Generato quando un menu viene nascosto o visualizzato.

Menu

Modify

Generato quando viene modificato il testo di un widget.

CCombo, Combo, Text, StyledText

Mouse

Generato quando l'utente preme, rilascia o fa doppio clic sul mouse posizionato sul controllo.

Control

MouseMove

Generato quando l'utente muove il mouse lungo il controllo.

Control

MouseTrack

Generato quando il mouse si avvicina, si allontana o passa sul controllo.

Control

Paint

Generato quando è necessario ridisegnare il controllo.

Control

Selection

Generato quando l'utente seleziona una voce nel controllo.

Button, CCombo, Combo, CoolItem, CTabFolder, List, MenuItem, Sash, Scale, ScrollBar, Slider, StyledText, TabFolder, Table, Table CursorTableColumn, TableTree, Text, ToolItem, Tree

Shell

Generato quando una shell viene ridotta, ingrandita, attivata, disattivata o chiusa.

Shell

Traverse

Generato quando un controllo viene attraversato dall'utente mediante pressione di un tasto.

Control

Tree

Generato quando l'utente espande o comprime le voci presenti nella struttura.

Tree, TableTree

Verify

Generato quando il testo di un widget sta per essere modificato. Dà all'applicazione la possibilità di alterare il testo o di impedire la modifica.

Text, StyledText

Eventi non tipizzati

Il sistema di eventi tipizzati sopra illustrato viene implementato con un meccanismo di eventi widget non tipizzati di basso livello. Questo meccanismo non è destinato a essere utilizzato dalle applicazioni, ma, come si vedrà, viene utilizzato all'interno dell'implementazione SWT. È, inoltre, utilizzato in molte implementazioni di pagine delle procedure guidate del workbench.

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

Copyright IBM Corporation e altri 2000, 2003.