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