Una vez creada una pantalla y algunos widgets y tras iniciar el bucle de mensajes de la aplicación, ¿dónde se produce el trabajo real? Se produce cada vez que se lee un evento de la cola y se despacha al widget. La mayor parte de la lógica de la aplicación se implementa en forma de respuestas a los eventos del usuario.
El patrón básico consiste en añadir un escuchador a un widget que se haya creado; cuando se produzca el evento adecuado, se ejecutará el código del escuchador. Este sencillo ejemplo se ha obtenido como adaptación 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 sobre el evento (XyzEvent) y un método de API que permite añadir el escuchador (método addXyzListener). Si hay definido más de un método en la interfaz del escuchador, se proporciona también un adaptador (XyzAdapter) que implementa la interfaz del escuchador y proporciona métodos vacíos. Todos los eventos, escuchas y adaptadores están definidos en el paquete org.eclipse.swt.events.
Las tablas siguientes muestran un resumen de los eventos disponibles y de los widgets que dan soporte a cada evento. Los eventos pueden dividirse en dos categorías generales: eventos de alto nivel, que representan una operación lógica en un control, y eventos de bajo nivel, que describen interacciones de usuario más específicas. Los eventos de alto nivel pueden representarse con varios eventos de bajo nivel que pueden diferir según la plataforma. En general, los eventos de bajo nivel sólo deben utilizar para implementaciones de widget personalizadas.
Tipo de evento |
Descripción |
---|---|
Activate, Deactivate | Se generan cuando un Control se activa o se desactiva. |
Arm | Un MenuItem está armado (resaltado y preparado para ser seleccionado). |
Close | Una Shell está a punto de cerrarse a solicitud del gestor de ventanas. |
DefaultSelection | El usuario selecciona un elemento invocando una acción de selección por omisión. Por ejemplo, pulsando Intro o efectuando una doble pulsación en una fila de una tabla. |
Dispose | Un widget está a punto de desecharse, ya sea programáticamente o por acción del usuario. |
DragDetect | El usuario ha iniciado una posible operación de arrastrar. |
Expand, Collapse | Un elemento de un árbol se expande o se contrae. |
Help | El usuario ha solicitado ayuda para un widget. Por ejemplo, esto se produce cuando se pulsa la tecla F1 en Windows. |
Iconify, Deiconify | Una Shell se ha minimizado, maximizado o restaurado. |
MenuDetect | El usuario ha solicitado un menú de contexto. |
Modify | El texto del widget se ha modificado. |
Move, Resize | Un control ha cambiado de posición o se ha redimensionado, ya sea programáticamente o por acción del usuario. |
Selection | El usuario selecciona un elemento en el control. Por ejemplo, pulsando en una fila de una tabla o navegando con el teclado por los elementos. |
SetData | Es necesario establecer datos en un TableItem cuando se utiliza una tabla virtual. |
Show, Hide | Se ha modificado la visibilidad de un control. |
Traverse | El usuario intenta salir a través del control utilizando una pulsación. Por ejemplo, se utilizan las teclas de escape o de tabulación para la acción de cruce. |
Verify | El texto de un widget está a punto de ser modificado. Este evento proporciona a la aplicación la posibilidad de modificar el texto o de impedir la modificación. |
Tipo de evento |
Descripción |
---|---|
FocusIn, FocusOut | Un control ha ganado o perdido el foco. |
KeyDown, KeyUp | El usuario ha pulsado o soltado una tecla del teclado cuando el control tiene el foco del teclado. |
MouseDown, MouseUp, MouseDoubleClick | El usuario ha pulsado, soltado o realizado una doble pulsación del ratón sobre el control. |
MouseMove | El usuario ha movido el ratón por encima del control. |
MouseEnter, MouseExit, MouseHover | El ratón ha entrado, salido o pasado sobre el control. |
MouseWheel | Se ha girado la rueda del ratón. |
Paint | El control se ha dañado y necesita que se vuelva a pintar. |
Además del sistema de eventos con tipo descrito anteriormente, SWT da soporte a un mecanismo de eventos de widget sin tipo de bajo nivel. El mecanismo de eventos sin tipo se basa en una constante que permite identificar el tipo de evento y define un escuchador genérico que se suministra junto con esta constante. Esto permite al escuchador implementar un escuchador de "estilo de caso". En el siguiente fragmento de código, definimos un manejador de eventos genéricos y añadimos varios escuchas 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 ("Redimensionamiento recibido"); break; case SWT.Paint: System.out.println ("Pintura recibida"); break; default: System.out.println("Evento desconocido recibido"); } } }; shell.addListener(SWT.Resize, listener); shell.addListener(SWT.Paint, listener);