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 Cursor, TableColumn, 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 |
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);