Finora è stato illustrato come creare una visualizzazione e alcuni widget e come eseguire un ciclo di messaggi dell'applicazione. L'operazione si verifica realmente ogni volta che un evento viene letto dalla coda e distribuito a un widget. La logica applicativa in maggioranza è implementata come risposta agli eventi dell'utente.
Il modello base prevede l'aggiunta di un listener a un widget creato. Il codice del listener viene eseguito nel momento in cui si verifica l'evento appropriato. Il seguente esempio è 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 ());
}
});
Ciascun tipo di listener ha un'interfaccia che definisce il listener (XyzListener), una classe che fornisce le informazioni evento (XyzEvent) e un metodo API per aggiungere il listener (addXyzListener). Quando nell'interfaccia listener viene stabilito più di un metodo, viene fornito un adattatore (XyzAdapter) incaricato di implementare l'interfaccia e fornire 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 fornito 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 |
Key |
Generato quando l'utente preme o rilascia un tasto mentre il controllo è attivo sulla tastiera. |
Control |
Menu |
Generato quando un menu viene nascosto o mostrato. |
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, CTabFolder, List, MenuItem, Sash, Scale, ScrollBar, Slider, StyledText, TabFolder, Table, 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 identifica il tipo di evento in base a una costante e definisce un listener generico fornito con questa costante. In questo modo il listener può implementare un listener "case style". Nel seguente frammento viene definito un gestore di evento generico e vengono aggiunti svariati 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);