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, 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 dan soporte a cada evento.
Tipo de evento |
Descripción |
Widgets |
---|---|---|
Arm |
Se genera cuando se arma un widget, como puede ser un elemento de menú. |
MenuItem |
Control |
Se genera cuando se mueve o redimensiona un control. |
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 obtiene el foco o lo pierde. |
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 suelta una tecla del teclado si el control tiene el foco del teclado. |
Control |
Menu |
Se genera cuando se muestra o se oculta un menú. |
Menu |
Modify |
Se genera cuando se modifica el texto de un widget. |
CCombo, Combo, Text, StyledText |
Mouse |
Se genera cuando el usuario pulsa, suelta o pulsa dos veces el ratón sobre el control. |
Control |
MouseMove |
Se genera a medida que el usuario mueve el ratón a través del control. |
Control |
MouseTrack |
Se genera cuando el ratón entra, sale o se desplaza sobre el control. |
Control |
Paint |
Se genera cuando hay que volver a pintar un control. |
Control |
Selection |
Se genera cuando el usuario selecciona un elemento en el control. |
Button, CCombo, Combo, CoolItem, CTabFolder, List, MenuItem, Sash, Scale, ScrollBar, Slider, StyledText, TabFolder, Table, Table Cursor, TableColumn, TableTree, Text, ToolItem, Tree |
Shell |
Se genera cuando se minimiza, maximiza, activa, desactiva o cierra una shell. |
Shell |
Traverse |
Se genera cuando el usuario cruza un control utilizando pulsaciones de tecla. |
Control |
Tree |
Se genera cuando el usuario expande o contrae los elementos del árbol. |
Tree, TableTree |
Verify |
Se genera cuando se está a punto de modificar el texto de un widget. Proporciona a la aplicación la posibilidad de modificar el texto o de impedir que se modifique. |
Text, StyledText |
El sistema de eventos con tipo que se ha mostrado anteriormente está implementado con un mecanismo de eventos de widgets sin 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 muchas de las implementaciones de página de asistente del entorno de trabajo.
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 escuchadores 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);