Eventos

Se ha mostrado cómo crear una pantalla y algunos widgets y cómo ejecutar el bucle de mensajes de la aplicación. ¿Cuándo tiene lugar el trabajo real? Cada vez se lee un evento de la cola y se envía al widget. La mayoría de la lógica de la aplicación se implementa como respuestas a eventos de usuario.

El patrón básico es añadir un escuchador al widget que haya creado. Cuando tiene lugar el evento adecuado, se ejecuta el código del escuchador. Este ejemplo simple se ha adaptado de 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 ());
    }
});

Para cada tipo de escuchador hay una interfaz que define el escuchador (XyzListener), una clase que proporciona información de eventos (XyzEvent) y un método de API para añadir el escuchador (addXyzListener).  Si hay más de un método definido en la interfaz del escuchador, se proporciona un adaptador(XyzAdapter) que implementa la interfaz del escuchador y proporciona métodos vacíos. Todos los eventos, escuchadores y adaptadores están definidos en el paquete org.eclipse.swt.events.

La tabla siguiente muestra un resumen de los eventos disponibles y de los widgets que soportan cada evento.

Tipo de evento

Descripción

Widgets

Arm

Se genera cuando se protege a un widget como, por ejemplo, un elemento de menú.

MenuItem

Control

Se genera cuando se mueve un control o se modifica el tamaño del mismo.

Control, TableColumn, Tracker

Dispose

Se genera cuando se desecha un widget, ya sea programáticamente o por acción del usuario.

Widget

Focus

Se genera cuando un control es el centro de interés o deja de serlo.

Control

Help

Se genera cuando el usuario solicita ayuda para un widget, como cuando se pulsa la tecla F1.

Control, Menu, MenuItem

Key

Se genera cuando el usuario pulsa o libera una tecla del teclado cuando el control es el centro de interés a nivel de teclado.

Control

Menu

Se genera cuando se muestra o se oculta un menú.

Menu

Modify

Se genera cuando se modifica un texto del widget.

CCombo, Combo, Text, StyledText

Mouse

Se genera cuando el usuario pulsa, libera o efectúa una doble pulsación del ratón sobre el control.

Control

MouseMove

Se genera a medida que el usuario mueve el ratón por el control.

Control

MouseTrack

Se genera cuando el ratón entra, sale o se desplaza sobre el control.

Control

Paint

Se genera cuando un control debe volver a ilustrarse.

Control

Selection

Se genera cuando el usuario selecciona un elemento en el control.

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

Shell

Se genera cuando un shell se minimiza, maximiza, activa, desactiva o cierra.

Shell

Traverse

Se genera cuando el usuario pasa por un control utilizando pulsaciones de tecla.

Control

Tree

Se genera cuando el usuario amplía o contrae elementos en el árbol.

Tree, TableTree

Verify

Se genera cuando se va a modificar un texto del widget. Proporciona a la aplicación la posibilidad de modificar el texto o de impedir que se modifique.

Text, StyledText

Eventos no clasificados por tipo

El sistema de eventos clasificados por tipo que se ha mostrado anteriormente se implementa mediante un mecanismo de eventos de widget no clasificados por tipo de bajo nivel. Este mecanismo no está pensado para que las aplicaciones lo utilicen, pero sí se utiliza dentro de la implementación de SWT. También se utiliza en la mayoría de las implementaciones de página de asistente de entorno de trabajo.

El mecanismo de eventos no clasificados por tipo se basa en una constante para identificar el tipo de evento y define un escuchador genérico que se suministra con esta constante. Esto permite al escuchador implementar un escuchador de "estilo de caso". En el segmento siguiente se define un manejador de eventos genéricos y se añaden varios escuchadores al 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);