Eventi

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

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