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