En AWT la aplicación se entera de cómo interactúa el usuario con los artefactos a través de eventos.
Un evento es un objeto de la clase Event que indica:
class MyButton extends Button
{
Button(String nombre) { super(nombre); }
public boolean action(Event evt, Object artefacto)
{
... ; // código de la aplicación
return true;
}
}
En artefacto se indica el objeto con que interactuó el usuario.
Cuando este método retorna false se indica que el evento
no pudo ser procesado por este método y que debe ser propagado
hacia el contenedor de este artefacto. Esto significa que
entonces se invocará el método action del contenedor.
En este método se retorna true para que el contenedor no vuelva a procesar el mismo evento. Cuando no se redefine action, el método provisto por Button retorna false y por lo tanto debe ser el contenedor el que procesa el evento.
Por lo tanto la otra forma de recibir eventos es en la raíz. El problema de la raíz es que recibe los eventos de todos los artefactos y por lo tanto hay que comparar el artefacto recibido con cada uno de los artefactos contenidos en la raíz, para poder determinar cuál es la acción que debe llevar a cabo la aplicación.
Por lo tanto otra forma de recibir eventos es:
class Gui extends Frame // contenedor raíz
{
...
public boolean action(Event evt, Object art)
{
if (art==boton) ...
else if (art==check) ...
else if (art==texto) ...
else ... // otro
return true;
}
}
Existe una última forma no recomendada de captar eventos
usando handleEvent. Lo delicado de este
método es que recibe todos los eventos, por lo tanto es fácil
introducir errores atrapando eventos que deberían procesarse
en otro punto en la jerarquía de componentes.