Eventos

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 CursorTableColumn, 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

Eventos sin tipo

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

Copyright IBM Corporation y otros 2000, 2003.