478

Capítulo 11 Componentes de la GUI: parte 1

Antes de poder crear un objeto de una clase interna, debe haber primero un objeto de la clase de nivel 

superior que contenga a la clase interna. Esto se requiere debido a que un objeto de la clase interna tiene implí-
citamente una referencia a un objeto de su clase de nivel superior. También hay una relación especial entre estos 
objetos: el objeto de la clase interna puede acceder directamente a todas las variables de instancia y métodos de 
la clase externa. Una clase interna que es 

static

 no requiere un objeto de su clase de nivel superior, y no tiene 

implícitamente una referencia a un objeto de la clase de nivel superior. Como veremos en el capítulo 12, Gráfi cos 
y Java 2D™, la API 2D de Java utiliza mucho las clases anidadas 

static

.

El manejo de eventos en este ejemplo se realiza mediante un objeto de la clase interna 

privateManejador-

CampoTexto

 (líneas 50 a 80). Esta clase es 

private

 debido a que se utilizará sólo para crear manejadores de even-

tos para los campos de texto en la clase de nivel superior 

CampoTextoMarco

. Al igual que con los otros miembros 

de una clase, las clases internas pueden declararse como 

public

,

protected

 o 

private

.

Los componentes de GUI pueden generar una variedad de eventos en respuesta a las interacciones del 

usuario. Cada evento se representa mediante una clase, y sólo puede procesarse mediante el tipo apropiado de 
manejador de eventos. En la mayoría de los casos, los eventos que soporta un componente de GUI se describen 
en la documentación de la API de java para la clase de ese componente y sus superclases. Cuando el usuario opri-
me

Intro en un objeto 

JTextField

 o 

JPasswordField

, el componente de GUI genera un evento 

ActionEvent

(paquete

java.awt.event

). Dicho evento se procesa mediante un objeto que implementa la interfaz 

Action-

Listener

 (paquete 

java.awt.event

). La información aquí descrita está disponible en la documentación de la 

API de Java para las clases 

JTextField

 y 

ActionEvent

. Como 

JPasswordField

 es una subclase de 

JTextField

,

JPasswordField

 soporta los mismos eventos.

Para prepararnos para manejar los eventos en este ejemplo, la clase interna 

ManejadorCampoTexto

 imple-

menta la interfaz 

ActionListener

 y declara el único método en esa interfaz: 

actionPerformed

 (líneas 53 a 79). 

Este método especifi ca las tareas a realizar cuando ocurre un evento 

ActionEvent

. Por lo tanto, la clase 

Text-

FieldHandler

 cumple con los 

pasos 1 y2 que se listaron anteriormente en esta sección. En breve hablaremos 

sobre los detalles del método 

actionPerformed

.

Registro del manejador de evento para cada campo de texto

En el constructor de 

MarcoCampoTexto

, la línea 42 crea un objeto 

ManejadorCampoTexto

 y lo asigna a la varia-

ble

manejador

. El método 

actionPerformed

 de este objeto se llamará en forma automática cuando el usuario 

oprima

Intro en cualquiera de los campos de texto de la GUI. Sin embargo, antes de que pueda ocurrir esto, el 

programa debe registrar este objeto como el manejador de eventos para cada campo de texto. Las líneas 43 a 46 
son las instrucciones de registro de eventos que especifi can a 

manejador

 como el manejador de eventos para los 

tres objetos 

JTextField

 y el objeto 

JPasswordField

. La aplicación llama al método 

addActionListener

 de 

JTextField

 para registrar el manejador de eventos para cada componente. Este método recibe como argumento 

un objeto 

ActionListener

, el cual puede ser un objeto de cualquier clase que implemente a 

ActionListener

.

El objeto 

manejador

es un 

ActionListener

, ya que la clase 

ManejadorCampoTexto

 implementa a 

ActionLis-

tener

. Una vez que se ejecutan las líneas 43 a 46, el objeto 

manejador escucha los eventos

. Ahora, cuando el 

usuario oprime 

Intro en cualquiera de estos cuatro campos de texto, se hace una llamada al método 

actionPer-

formed

 (líneas 53 a 79) en la clase 

ManejadorCampoTexto

 para que maneje el evento. Si no está registrado un 

manejador de eventos para un campo de texto específi co, el evento que ocurre cuando el usuario oprime 

Intro en 

ese campo se 

consume

 (es decir, la aplicación simplemente lo ignora).

Observación de ingeniería de software 11.3

El componente de escucha de eventos para cierto evento debe implementar a la interfaz de escucha de eventos apro-
piada.

Error común de programación 11.2

Olvidar registrar un objeto manejador de eventos para un tipo de evento específi co de un componente de la GUI hace 
que los eventos de ese tipo se ignoren.

Detalles del método 

actionPerformed

 de la clase 

ManejadorCampoTexto

En este ejemplo estamos usando el método 

actionPerformed

 de un objeto manejador de eventos (líneas 53 a 

79) para manejar los eventos generados por cuatro campos de texto. Como nos gustaría imprimir en pantalla el 

11_MAQ_CAP_11.indd478

4/19/081:26:00AM