You are on page 1of 22

JFC y Swing 04

JA
Bauman / Dcima

Java Electrotecnia
JFC y Swing
Java

Qu es JFC y Swing?
JFC (Java Foundation Classes) significa Clases de Base de Java, y engloban un grupo de caractersticas
para la construccin de Interfaces Grficas de Usuario (o GUIs, Graphical User Interfaces) y para agregar
funcionalidad grfica e interactiva a aplicaciones de Java.
Se define como el conjunto de caractersticas descriptas en la siguiente tabla:

Caracterstica Descripcin
Componentes GUI Swing Incluye todo desde botones, paneles divisibles, a tablas.
Permite a cualquier programa que utilice los componentes Swing a elegir su
look and feel o visualizacin. Por ejemplo, el mismo programa puede usar un
Soporte para Look-and-Feel o look and feel de Java o de Windows. Muchos paquetes look and feel estn
visualizaciones disponibles de distintas fuentes. Desde la versin v1.4.2, la plataforma Java
soporta GTK+, lo que permite que cientos de look and feels existentes se
puedan utilizar en programas Swing.
Permite tecnologas asistidas, como lectores de pantalla y dispositivos Braille,
API de accesibilidad
para obtener informacin desde la interfaz del usuario.
Permite fcilmente incorporar grficos 2D de alta calidad, texto, e imgenes en
aplicaciones y applets. Java 2D incluye extensivas APIs (Application Programming
API Java 2D
Interface o Interfaz de Programacin de Aplicaciones) para generar y enviar a
dispositivos de impresin una salida de alta calidad.
Provee la habilidad de Arrastrar y Soltar entre aplicaciones Java y aplicaciones
Soporte de Arrastrar y Soltar
nativas.
Permite construir aplicaciones que pueden interactuar con usuarios alrededor
del mundo en sus propios lenguajes y convenciones culturales. Con el marco de
Internacionalizacin mtodos de entrada se puede construir aplicaciones que acepten texto en
lenguajes que usan miles de caracteres diferentes, como el japons, chino, o el
coreano.

El AWT (Abstract Window Toolkit)


Previo a la existencia de JFC y Swing, la programacin de Ventanas en Java se realizaba con AWT, que
definen el marco necesario para que el Java interacte con el sistema de ventanas nativo.
El Abstract Window Toolkit de Java es un conjunto de herramientas que definen un sistema de
ventanas abstracto, para poder encapsular en un slo paquete el funcionamiento (muy variado) de todos
los sistemas de ventanas nativos en los cuales se ejecutar.
Para poder lograr esto, soporta slo las funciones comunes a todos los sistemas de ventanas; de
manera que utiliza directamente el sistema nativo de ventanas en el cual se ejecuta para procesar las
imgenes en pantalla y manipular los objetos de la interfaz (controles, eventos, etc.).
Cualquier sistema de ventanas puede verse muy simplemente dentro de la programacin orientada a
objetos. El concepto de crear nuevos elementos a partir de otros existentes (a travs de la herencia), y
cambiar parte de su comportamiento encaja perfectamente en el AWT.

2 POLITECNICO
Como funciona el AWT de Java
El AWT requiere que este funcionando el sistema de ventanas nativo en la plataforma, porque lo utiliza
para implementar las ventanas en Java. Esto significa que el comportamiento de los elementos del AWT es
el proporcionado por el sistema nativo de ventanas; Tngase en cuenta que puede ser bastante diferente
en plataformas diferentes. A continuacin puede ver un grfico que explica resumidamente el
comportamiento del AWT dentro de la Mquina Virtual y una plataforma cualquiera:

Mquina Virtual Java Sistema Nativo


Programa Objetos
Java 1 AWT Grficos
2 Sistema
6 de
Controlador 5 Ventanas
de Eventos Nativo

4 3

Hardware

1) El programa Java realiza un pedido para agregar un botn a una ventana en la pantalla.
2) El AWT hace el pedido al sistema nativo de ventanas.
3) El sistema nativo de ventanas coloca el botn en la pantalla.
4) El botn en presionado por el Mouse.
5) El sistema nativo de ventanas comunica del evento ocurrido al Sistema Controlador de Eventos de Java.
6) El Controlador de Eventos de Java comunica del evento al programa Java.

Generalidades sobre los Sistemas de Ventanas


Los programas de ventanas no siguen una lnea de procedimientos en la cual ocurren cosas
secuencialmente de principio a fin. Nadie puede predecir en un momento dado cul de los elementos en
pantalla ser presionado por el usuario; elementos tales como botones, mens, cuadros, etc. Para poder
controlar este tipo de ocasiones, se utiliza un modelo denominado programacin por eventos,
programacin controlada por eventos, o programacin orientada a eventos.
En este tipo de programacin la lgica del cdigo se ve invertida. En lugar de un flujo de control de
principio a fin, el programa mayormente espera por la entrada del usuario. Cuando el usuario toca algo en
la pantalla con el puntero del Mouse, el Sistema de Ventanas se encarga de informarnos de este evento.
Para realizar esto el programador provee al Sistema de Ventanas de un controlador de eventos, el cual es
llamado por el Sistema cuando ocurre un evento determinado. Un controlador debe encargarse de los
eventos tanto grficos como de la accin que esta asociada con l. Por ejemplo si un botn dice presione

POLITECNICO 3
JFC y Swing
Java

aqu para leer el archivo, el controlador del evento del botn debe realizar todo el pintado del botn
apretado, y tambin leer el archivo correspondiente. Controlar el evento de un botn slo significa
informar que ocurri, pero otros eventos como arrastrar algo con el Mouse lleva mucho ms trabajo para
hacerlo aparecer correctamente en pantalla.
Prcticamente toda la programacin de ventanas consiste en aprender acerca de los diferentes objetos
que se pueden poner en la pantalla (ventanas, barras deslizantes, botones, etc.). El cdigo encargado de
controlar los eventos de cada elemento ser invocado cuando se necesite.

El Sistema de Ventanas en Java


En Java especficamente, cada elemento del sistema de ventanas se corresponde con una clase bien
definida del paquete java.awt.
Aparte de algunas clases que representan ciertos elementos de ayuda en los Sistemas de Ventanas
(clases que representan puntos, rectngulos, tamaos, Colores, Tipografas, Dispositivos Grficos, etc.),
principalmente tenemos los componentes y sus derivados que representan a todos los objetos visibles en
pantalla, con los cuales interacta el usuario. Estos componentes grficos siguen la siguiente jerarqua:

Component

Container Controles variados

Window Panel

Frame Dialog Applet

A partir de la creacin de JFC y Swing, dichas clases tienen sus correspondientes subclases cuyos
nombres comienzan con J y agregan todas las caractersticas descriptas al comienzo de este captulo a las
correspondientes clases de AWT. As por ejemplo la clase Component de AWT tiene su correspondiente
JComponent perteneciente a Swing, Container tiene su JContainer y as sucesivamente.
De aqu en ms slo haremos referencia a las clases Swing pero debe tenerse en cuenta que cada una
de ellas viene directamente de la jerarqua AWT.

4 POLITECNICO
Clase JComponent
La jerarqua del Swing parte de la clase JComponent, que define el tipo ms general de objeto Swing.
Todo en la pantalla esta construido a partir de componentes. Un componente principalmente realiza dos
funciones: se muestra a s mismo y a todo su contenido en pantalla; y controla los eventos relacionados a
los elementos de pantalla, tales como eventos de teclado y de Mouse cuando le corresponden a dicho
componente.
Un Componente tiene un tamao y una posicin, y puede ser dibujado en la pantalla. Esta es una clase
muy general que tiene mtodos para verificar si la instancia esta en pantalla, es visible, cual es su tamao
y su posicin, para mostrarla o no, y para indicar los colores y fuentes que utilizar. Tambin posee
mtodos para capturar eventos y controlarlos. Finalmente un componente se dibuja en pantalla cuando el
Sistema llama a su mtodo:

public void paint(Graphics g)

Cualquier objeto que pertenezca a una subclase de JComponent puede especializar el mtodo paint
para proveer instrucciones sobre como pintarse a s mismo.

Clase Container
Esta es una clase que se usa para contener varios componentes, y tratarlos como un grupo
relacionado. Normalmente, todos los controles en una ventana, o en una parte de una ventana estarn en
el mismo contenedor, y el contenedor los mostrar en pantalla. Posee el siguiente mtodo para agregar un
componente al contenedor:

public Component add(Component comp)

Un contenedor en s mismo (clase Container) no se muestra en pantalla. Solamente en las subclases


de Container se tiene algo que se puede mostrar en pantalla.

Clase JWindow
Esta clase representa una ventana totalmente en blanco. Ni siquiera posee un borde o una barra de
men. Normalmente no se utiliza directamente, sino a travs de clases ms especializadas (cmo JFrame
y JDialog).
La clase JWindow tiene unos pocos mtodos para mostrar y ocultar la ventana, traerla al frente o
llevarla al fondo, y para agrupar los componentes que posee.

Clase JFrame
Esta es un tipo ms especializado de ventana, en la cual se crean y se procesan Barras de Men (las
cuales pueden ser de mltiples niveles).
Tiene un borde y posiblemente una barra de Men asociada. Cuando se crea un JFrame, no es
fsicamente mostrado dentro del applet u otro contenedor, sino que como una ventana separada que flota
libremente en la pantalla.
Posee internamente un panel de contenido en donde se pueden agregar componentes.
A continuacin se muestra un simple ejemplo para mostrar un JFrame en pantalla en una aplicacin:

POLITECNICO 5
JFC y Swing
Java

import javax.swing.*;
public class ventana {
static JFrame f = new JFrame("Ventana");

public static void main(String[] args) {


f.resize(300, 100);
f.show();
}
}

Clase Dialog
La clase JDialog puede ser usada para mostrar una ventana que tiene un rea donde el usuario puede
escribir una lnea de texto. Los dilogos pueden ser modales (ninguna entrada del usuario puede ocurrir
hasta que se cierra el dilogo) o no-modales (el dilogo puede ser ignorado o utilizado cuando se desee).
Esto se controla con una bandera booleana en el constructor.

Clase JPanel
Un panel es una pequea regin que normalmente se utiliza dentro de un JFrame. Cada panel puede
ser tratado como un contenedor: se le puede agregar componentes, capturar eventos, etc.

Clase JApplet
JApplet es un tipo de panel. Esto nos dice principalmente que los Applets ya tienen un
comportamiento grfico en s.
Una ventaja de un Applet sobre una aplicacin para un programa interactivo es que uno puede
empezar a agregar componentes y mostrarlos sin necesidad de crear un entorno, porque ya existe uno (el
del Navegador correspondiente).
Al igual que el Jrame, posee internamente un panel de contenido en donde se pueden agregar
componentes.

6 POLITECNICO
Controles del Swing
Los controles son los componentes que permiten una interaccin directa con el usuario, permitindole
ingresar datos, indicar acciones (a travs de botones, barras, etc.), desplazarse por cierta informacin, y
cualquier otra cosa que el programador le permita.
Todos son derivados de la clase JComponent, y los principales son los siguientes: JButton, JLabel,
JCheckBox, JTextField, JTextArea, JList, JComboBox.
Lo que el programador hace con estos controles es lo siguiente:
1) Los agrega a un JFrame o a un JApplet (debido a que stos son contenedores de componentes), y
luego se muestran.
2) Obtiene los eventos cuando el usuario presiona botones, realiza selecciones, etc., y los procesa.

El mtodo add puede ser aplicado al panel de contenido de un JFrame en una aplicacin, como sigue:

JFrame f = new JFrame();


...
f.getContentPane().add( algunControl );

O puede ser aplicado al panel de un JApplet, as:

public void init() {


this.getContentPane().add( algunControl );
}

O, ms simplemente:

public void init() {


getContentPane().add( algunControl );
}

Aqu se utiliza el mtodo init(), que se invoca cuando el Applet es cargado en memoria, lo que hace
de este mtodo un buen lugar donde poner el cdigo que agrega estos controles; Pero tambin se puede
realizar dentro de los mtodos constructores, especialmente til si el objeto no slo ser utilizado como un
Applet.

A continuacin se detallan cada uno de los diferentes controles disponibles en el Swing, junto con una
descripcin de su uso:

JLabel
Es uno de los componentes ms simples, representa una etiqueta. Es una cadena de texto que aparece
en la pantalla. Estas etiquetas no reciben ninguna entrada del usuario, simplemente se utilizan como una
manera rpida de mostrar un texto en pantalla.

Cmo se utiliza?

El constructor toma un parmetro que representa el texto de la etiqueta.

Ejemplo:
JLabel l = new JLabel("Etiqueta");
getContentPane().add(l);

POLITECNICO 7
JFC y Swing
Java

JButton
Esta clase representa un botn. El programa se informa cada vez que el usuario lo presiona.

Cmo se utiliza?

El constructor toma un solo parmetro que representa el texto que se encuentra dentro del botn,
indicando su uso.

Ejemplo:
JButton b = new JButton("Presione aqu");
getContentPane().add(b);

Mtodos importantes

? void setText( String texto )


cambia el texto del botn al String texto (puede ser null si no posee texto).
? String getText()
el valor actual del texto, o null si no posee texto.

JTextField
Una lnea de texto en donde el usuario puede escribir. La cantidad de caracteres visibles se puede
configurar.

Cmo se utiliza?

El constructor ms general toma dos parmetros:


1. El texto con el que se inicializa;
2. La cantidad de caracteres que sern visibles dentro del campo de texto.

Ejemplo:
JTextField tf = new JTextField("escriba aqu", 20);
getContentPane().add(tf);

Mtodos importantes

? String getText()
Obtiene el texto actual.
? void setText ( String texto )
Setea el texto al parmetro indicado.

8 POLITECNICO
JTextArea
Es un campo de texto con varias lneas en las cuales el usuario puede ingresar texto.

Cmo se utiliza?

Los constructores ms comunes pueden tomar las siguientes combinaciones:


? Dos valores enteros indicando la cantidad de filas y columnas a mostrar;
? Un String inicial para que contenga el rea;
? Un String para el texto inicial, y dos enteros para la cantidad de filas y columnas.

Ejemplo:
JTextArea ta = new JTextArea("Texto Inicial", 4, 20);
getContentPane().add(ta);

Mtodos importantes

? String getText()
Obtiene el texto actual.
? void setText ( String texto )
Setea el texto al parmetro indicado.

JCheckbox
Un objeto grfico que representa un valor booleano de "presionado" o "no presionado"; o "activado" o
"desactivado". Posee un texto explicando la eleccin.

Cmo se utiliza?

El constructor ms general toma dos parmetros:


? El texto que acompaa al JCheckbox, como un String, o null si no posee texto;
? El estado inicial de este JCheckbox, como un booleano (es decir true para "presionado" o "activado"
y false para "no presionado" o "desactivado").

Ejemplos:
JCheckbox cb = new JCheckbox("Azul?", true);
getContentPane().add(cb);

POLITECNICO 9
JFC y Swing
Java

Mtodos importantes

? boolean isSelected()
el estado de este JCheckbox, como un valor booleano.
? void setSelected( boolean state )
cambia el estado del JCheckbox.
? String getText()
el texto que acompaa a este JCheckbox, o null si no tiene texto.
? void setText( String label )
cambia el texto que acompaa al JCheckbox, o null si no tiene texto.

JList
Una lista deslizable de cadenas de texto, de donde el usuario puede seleccionar una o ms de ellas (se
puede configurar como de simple o mltiple seleccin).

Cmo se utiliza?

El constructor ms general toma un solo parmetro que representa un arreglo de objetos que sern el
contenido inicial de la lista.

Ejemplo:
String[] datos = {"uno", "dos", "tres", "cuatro"};
JList lista = new JList(datos);
getContentPane().add(lista);

Mtodos importantes

? int getSelectedIndex()
Obtiene el ndice del elemento seleccionado, o 1 si no hay elementos seleccionados o hay ms de un
elemento seleccionado (para este caso utilice getSelectedIndexes()).
? int[] getSelectedIndices()
Obtiene un arreglo con los ndices de todos los elementos seleccionados.
? Object getSelectedValue()
Obtiene el objecto seleccionado, o null si no hay elementos seleccionados.
? Object[] getSelectedValues()
Obtiene un arreglo con los objetos seleccionadas.

10 POLITECNICO
JComboBox
Permite seleccionar entre varias cadenas de texto dadas. Es una lista desplegable, similar a un men
desplegable. Normalmente slo se ve la cadena seleccionada, pero cuando se presiona con el botn del
Mouse sobre este control, se despliega una lista con todas las dems opciones, de manera que el usuario
pueda elegir la que desee. Tambin posee otro modo de funcionamiento en el cual se puede escribir un
texto nuevo aunque este no pertenezca a la lista del mismo.

Cmo se utiliza?

El constructor ms general toma un solo parmetro que representa un arreglo de objetos que sern el
contenido inicial de la lista.

Ejemplo:
String[] datos = {"uno", "dos", "tres", "cuatro"};
JComboBox cb = new JComboBox(datos);
getContentPane().add(c);

Mtodos importantes

? Object getItemAt( int index )


Obtiene el objeto asociado al ndice indicado.
? int getSelectedIndex()
Obtiene el ndice del elemento seleccionado, o 1 si no hay elementos seleccionados o hay ms de un
elemento seleccionado.
? Object getSelectedItem()
Obtiene el objeto seleccionado, o null si no hay elementos seleccionados.

JMenu
Un JFrame puede contener a una barra de men (clase JMenuBar), quien a su vez puede contener
varios mens desplegables (clase JMenu). La barra de men aparece sobre la parte superior del JFrame
y muestra los nombres de cada men que se le agreg. Cada men desplegable contiene elementos que
se pueden seleccionar (clase JMenuItem), cada uno de ellos identificado con una cadena de caracteres
(clase String). Se puede poblar un men no slo con elementos (JMenuItem), sino tambin con otros
mens, creando de esta manera mltiples niveles de men.

Cmo se utiliza?

La barra de men (con la clase JMenuBar) se construye con un simple constructor sin parmetros.
Este objeto JMenuBar es el que representa la propia barra que se encuentra en el JFrame, y es ste el
que debe agregarse al JFrame como un nuevo elemento (con el mtodo 'setJMenuBar(JMenuBar)'
del JFrame).
Luego, por cada men que contendr la barra, se debe crear un objeto JMenu con el nombre del
men. Estos mens deben luego ser agregados a la barra de men, a travs del mtodo 'add(JMenu)'
del JMenuBar.

POLITECNICO 11
JFC y Swing
Java

Y finalmente, para cada elemento que contendr cada men, se crean los correspondientes objetos
JMenuItem con el String deseado, para luego ser agregados (con el mtodo 'add(JMenuItem)' del
JMenu) al men correspondiente.

Todo esto es mucho ms sencillo de ver a travs de un ejemplo, tratemos de hacer lo siguiente:
1. Una barra con dos mens: "Archivo" y "Edicin";
2. Para el men "Archivo" tendremos tres elementos: "Cargar", "Grabar" y "Salir";
3. Para el men "Edicin" dos elementos: "Borrar" y "Pegar".

JFrame f = new JFrame("Ventana que contendr el men");


JMenuBar mb = new JMenuBar();
f.setJMenuBar(mb);

JMenu archivo = new JMenu("Archivo");


JMenuItem cargar = new JMenuItem("Cargar");
JMenuItem grabar = new JMenuItem("Grabar");
JMenuItem salir = new JMenuItem("Salir");
archivo.add(cargar);
archivo.add(grabar);
archivo.add(salir);
mb.add(archivo);

JMenu edicion = new JMenu("Edicin");


JMenuItem borrar = new JMenuItem("Borrar");
JMenuItem pegar = new JMenuItem("Pegar");
edicion.add(borrar);
edicion.add(pegar);
mb.add(edicion);

Al cada objeto JMenu no slo le se pueden agregar elementos de tipo JMenuItem sino tambin otros
mens (clase JMenu, para lograr mltiples niveles) y elementos de tipo JCheckboxMenuItem, que
representan una opcin de men que puede ser activada y desactivada. La manera de utilizar este objeto
es similar al JMenuItem, pudiendo tomar el constructor un parmetro ms indicando el estado inicial del
elemento (como un booleano) y teniendo los mtodos:
? boolean isSelected()
? void setSelected( boolean b )
para obtener y setear el estado respectivamente.

12 POLITECNICO
Eventos en Java
El sistema de eventos en Java funciona de la siguiente manera:
1. El Sistema Nativo de la plataforma en que se ejecuta la Mquina Virtual Java genera un evento, ya
sea debido a un evento de Hardware, como cuando se mueve el Mouse o se presiona una tecla, o
debido a eventos de Software, como cuando es necesario repintar un componente, cambiar su
tamao, etc.;
2. Si el evento generado corresponde a un programa Java, se le informa a la Mquina Virtual a travs
del Controlador de Eventos de Java, quien a su vez comprueba a que JFrame de los que estn
visibles corresponde y le informa (o a un JApplet, depende el caso);
3. El JFrame verifica si el evento le pertenece y si no verifica a cul de los componentes que contiene le
corresponde. Si el JFrame contiene otros contenedores (clase Container) y el evento lo recibe uno
de ellos, estos tambin empiezan a verificar a quien de sus "hijos" corresponde, formando un rbol,
de manera que un evento siempre lo reciben los componentes que se encuentran ltimos (o ms
arriba) en la jerarqua de hijos.
4. La manera de informarle al objeto correspondiente de ese programa (siempre un componente) es a
travs de uno o ms mtodos previamente acordados para avisar de ese evento, es decir, cuando el
componente recibe el evento, ste empieza a invocar a cada uno de los mtodos que previamente se
le indico que controlaran ese evento.

Existen distintos tipos de eventos en Java, cada uno correspondiente a un caso particular. El AWT nos
provee de dos tipos conceptuales de eventos: de bajo nivel y semnticos.
Un evento de bajo nivel es aqul que representa una entrada de bajo nivel (como movimientos y clics
del Mouse, presiones del teclado, etc.) o una ocurrencia del Sistema de Ventanas en un componente visual
en la pantalla (como ser que una ventana necesita volver a pintarse, o cambio su tamao, etc.). Las clases
de eventos de bajo nivel definidas por el AWT son las siguientes:

java.util.EventObject
java.awt.AWTEvent
java.awt.event.ComponentEvent (se mueve, cambia el tamao de un componente, etc.)
java.awt.event.FocusEvent (un componente adquiere el foco, o pierde)
java.awt.event.InputEvent
java.awt.event.KeyEvent (se apret una tecla, se solt, en el componente, etc.)
java.awt.event.MouseEvent (se apret el botn del mouse, se movi, etc.)
java.awt.event.ContainerEvent
java.awt.event.WindowEvent

Los eventos semnticos estn definidos a un mayor nivel para encapsular la semntica de un modelo
de componentes de interfaz de usuario. Las clases de eventos semnticos definidas por el AWT son las
siguientes:

java.util.EventObject
java.awt.AWTEvent
java.awt.event.ActionEvent (ocurri una accin determinada)
java.awt.event.AdjustmentEvent (un valor fue ajustado)
java.awt.event.ItemEvent (cambi el estado de un item)
java.awt.event.TextEvent (el valor del objeto de texto cambi)

Estos eventos semnticos no estn directamente ligados a ningn componente, pero tienen sentido
para un grupo de componentes que implementan un modelo semntico similar. Por ejemplo, un objeto
Botn (clase JButton) va a generar un evento de "accin" cuando sea presionado, un objeto Lista (clase
JList) generar un evento de "accin" cuando se presione dos veces con el botn del Mouse sobre un

POLITECNICO 13
JFC y Swing
Java

elemento de ella, un elemento de un men (clase JMenuItem) generar un evento de "accin" cuando
sea seleccionado de un men, y un objeto temporizador podra generar un evento "accin" cuando su
contador termine (este ltimo es un caso hipottico).

Controladores de eventos (Event Listeners)


La manera en que el lenguaje Java nos permite controlar los eventos, independientemente del Sistema
de Ventanas de la plataforma en la que trabaje, en a travs de un grupo de interfaces destinadas para
ello. Normalmente estas interfaces tienen distintos mtodos representando cada uno de los distintos tipos
de eventos que pueden controlar. Estas interfaces tienen una correspondencia con las clases de eventos
vistas anteriormente; para cada una de las clases de eventos, hay una correspondiente interfaz
controladora. Por ejemplo, la interfaz FocusListener (controladora de foco) define dos mtodos,
focusGained() (adquiere el foco) y focusLost() (se pierde el foco), una para cada tipo de evento
que representa la clase FocusEvent (clase que representa los eventos de foco de un componente).
El API o Interfaz de Programacin de Aplicaciones trata de hacer un balance entre los tipos de
interfaces controladoras de eventos sin proveer una interfaz separada para cada tipo independiente de
evento.
Las interfaces controladoras de eventos de bajo nivel definidas por el AWT son las siguientes:

java.util.EventListener
java.awt.event.ComponentListener
java.awt.event.ContainerListener
java.awt.event.FocusListener
java.awt.event.KeyListener
java.awt.event.MouseListener
java.awt.event.MouseMotionListener
java.awt.event.WindowListener

Las interfaces controladoras de eventos semnticos definidas por el AWT son las siguientes:

java.util.EventListener
java.awt.event.ActionListener
java.awt.event.AdjustmentListener
java.awt.event.ItemListener
java.awt.event.TextListener

Adaptadores
Como muchas de las interfaces controladoras de eventos estn diseadas para controlar mltiples
subtipos de eventos (por ejemplo: la interfaz MouseListener controla eventos de los botones del Mouse,
cuando se presionan y cuando se sueltan, eventos de cuando el Mouse entra o sale de un componente,
etc.), el AWT provee un conjunto de clases abstractas "adaptadoras", implementando cada una de las
interfaces controladoras. Esto permite, de manera muy simple, crear subclases de los Adaptadores y
especializar slo los mtodos representando los tipos de eventos que estamos interesados en controlar.

14 POLITECNICO
Las clases Adaptadoras provistas por el AWT son las siguientes:

java.awt.event.ComponentAdapter
java.awt.event.ContainerAdapter
java.awt.event.FocusAdapter
java.awt.event.KeyAdapter
java.awt.event.MouseAdapter
java.awt.event.MouseMotionAdapter
java.awt.event.WindowAdapter

Nota: no hay adaptadores provistos para los controladores de eventos semnticos, ya que cada uno de
stos slo contienen un mtodo y un adaptador no sera de una utilidad real.

Cmo se utilizan los distintos tipos de eventos ?


Para controlar un determinado tipo de evento de un determinado componente, lo primero que
debemos hacer es crear una clase que contendr los mtodos controladores de los eventos. Para esto la
clase debe:
? Implementar la interfaz controladora correspondiente (y todos los mtodos que ella contiene);
? extender la clase abstracta adaptadora correspondiente (especializando solamente los mtodos de
inters).

El objeto controlador creado a partir de esa clase debe luego ser registrado con el componente usando
el mtodo correspondiente del componente (a continuacin estn detallados todos las distintas categoras
de eventos con sus correspondientes clases relacionadas y sus mtodos). Cuando en el componente
ocurra algn evento relacionado con el tipo de evento que hemos registrado, el mtodo correspondiente
ser invocado y se le pasar un objeto de evento (clases derivadas de EventObject) correspondiente al
evento generado.

POLITECNICO 15
JFC y Swing
Java

Eventos de Componente
Cuando cambia el tamao del componente, su posicin, o su visibilidad, el mtodo relevante en el
objeto controlador es invocado, y recibe un objeto ComponentEvent.
Los eventos de Componente son provistos nicamente para su notificacin; el AWT automticamente
controlar los movimientos y cambios de tamao internamente de manera que el programa responda
correctamente independientemente de si se registra un controlador de eventos de Componente o no.
La clase controladora de los eventos de Componente se puede crear implementando la interfaz
ComponentListener o extendiendo la clase adaptadora ComponentAdapter. El objeto controlador de
este tipo de eventos se registra con el mtodo addComponentListener() perteneciente a cualquier
componente (clase Component).

Mtodos de la interfaz ComponentListener (e implementados por ComponentAdapter)


? public void componentMoved( ComponentEvent e )
Invocado cuando cambia la posicin del componente.
? public void componentResized( ComponentEvent e )
Invocado cuando cambia el tamao del componente.
? public void componentHidden( ComponentEvent e )
Invocado cuando el componente se vuelve invisible.
? public void componentShown( ComponentEvent e )
Invocado cuando el componente se vuelve visible.

Mtodos de la clase ComponentEvent


? Component getComponent()
Obtiene el componente donde fue generado este evento.

Eventos de Contenedor
Cuando cambia el contenido de un contenedor porque se agreg o quit un componente de l, el
mtodo relevante en el objeto controlador es invocado, y recibe un objeto ContainerEvent.
Los eventos de Contenedor son provistos nicamente para su notificacin; el AWT automticamente
realizar las operaciones de agregar y quitar internamente de manera que el programa responda
correctamente independientemente de si se registra un controlador de eventos de Contenedor o no.
La clase controladora de los eventos de Contenedor se puede crear implementando la interfaz
ContainerListener o extendiendo la clase adaptadora ContainerAdapter. El objeto controlador de este
tipo de eventos se registra con el mtodo addContainerListener() perteneciente a los contenedores
(clase Container).

Mtodos de la interfaz ContainerListener (e implementados por ContainerAdapter)


? public void componentAdded( ContainerEvent e )
Invocado cuando se ha agregado un componente al contenedor.
? public void componentRemoved( ContainerEvent e )
Invocado cuando se ha removido un componente del contenedor.

16 POLITECNICO
Mtodos de la clase ContainerEvent
? Component getComponent()
Obtiene el componente donde fue generado este evento.
? Container getContainer()
Obtiene el contenedor donde fue generado este evento.
? Component getChild()
Obtiene el componente hijo que fue agregado o quitado en este evento.

Eventos de Foco
Se genera un evento de foco cuando un componente obtiene o pierde el foco del teclado. Slo un
componente puede recibir los eventos del teclado en un momento dado; este componente que los recibe
posee el foco del teclado. El usuario puede, a travs del Mouse y del teclado, cambiar en cualquier
momento el foco del teclado, es decir el componente que recibir los eventos del teclado (presionando
sobre un componente o con una combinacin de teclas), y es ese momento en el cual se genera un
evento de Foco. En este momento el mtodo relevante en el objeto controlador es invocado, y recibe un
objeto FocusEvent.
La clase controladora de los eventos de Foco se puede crear implementando la interfaz FocusListener
o extendiendo la clase adaptadora FocusAdapter. El objeto controlador de este tipo de eventos se
registra con el mtodo addFocusListener() perteneciente a cualquier componente (clase
Component).

Mtodos de la interfaz FocusListener (e implementados por FocusAdapter)


? public void focusGained( FocusEvent e )
Invocado cuando un componente obtiene el foco del teclado.
? public void focusLost( FocusEvent e )
Invocado cuando un componente pierde el foco del teclado.

Mtodos de la clase FocusEvent


? Component getComponent()
Obtiene el componente donde fue generado este evento.
? boolean isTemporary()
Verifica si este evento de cambio de foco es un cambio temporario.

Eventos de Teclado
Cada vez que una tecla es presionada, soltada, o tipeada (presionada y soltada) se genera un evento
de Teclado. El mtodo relevante en el objeto controlador es entonces invocado, y recibe un objeto
KeyEvent.
La clase controladora de los eventos de Teclado se puede crear implementando la interfaz
KeyListener o extendiendo la clase adaptadora KeyAdapter. El objeto controlador de este tipo de
eventos se registra con el mtodo addKeyListener() perteneciente a cualquier componente (clase
Componente).

POLITECNICO 17
JFC y Swing
Java

Mtodos de la interfaz KeyListener (e implementados por KeyAdapter)


? public void keyPressed( KeyEvent e )
Invocado cuando se ha presionado una tecla.
? public void keyReleased( KeyEvent e )
Invocado cuando se ha soltado una tecla.
? public void keyTyped( KeyEvent e )
Invocado cuando se ha tipeado una tecla. Este evento ocurre cuando una tecla se presiona y
seguidamente se suelta.

Mtodos de la clase KeyEvent


? char getKeyChar()
Obtiene el carcter asociado con la tecla en este evento. Si existe un cdigo Unicode vlido para este
evento de tecla, se devuelve CHAR_UNDEFINED.
? int getKeyCode()
Obtiene el cdigo de tecla entero asociado con la tecla en este evento.
? boolean isAltDown()
Verifica si el modificador Alt estaba presionado o no en este evento.
? boolean isControlDown()
Verifica si el modificador Control estaba presionado o no en este evento.
? boolean isMetaDown()
Verifica si el modificador Meta estaba presionado o no en este evento.
? boolean isShiftDown()
Verifica si el modificador Shift estaba presionado o no en este evento.
? Component getComponent()
Obtiene el componente donde fue generado este evento.

Eventos de Mouse
Un evento de Mouse se genera cuando el Mouse es presionado, soltado, o clickeado (presionado y
soltado). Tambin se genera un evento de Mouse cuando el cursor del Mouse entra o sale de un
componente. Cuando ocurre un evento de Mouse el mtodo relevante en el objeto controlador es
invocado, y recibe un objeto MouseEvent.
La clase controladora de los eventos de Mouse se puede crear implementando la interfaz
MouseListener o extendiendo la clase adaptadora MouseAdapter. El objeto controlador de este tipo de
eventos se registra con el mtodo addMouseListener() perteneciente a cualquier componente (clase
Componente).

Mtodos de la interfaz MouseListener (e implementados por MouseAdapter)


? public void mousePressed( MouseEvent e )
Invocado cuando se ha presionado un botn del Mouse en un componente.
? public void mouseReleased( MouseEvent e )
Invocado cuando se ha soltado un botn del Mouse en un componente.
? public void mouseClicked( MouseEvent e )
Invocado se clickea el Mouse en un componente (Se presiona y seguidamente se suelta un botn del
Mouse).

18 POLITECNICO
? public void mouseEntered( MouseEvent e )
Invocado cuando el Mouse entra a un componente.
? public void mouseExited( MouseEvent e )
Invocado cuando el Mouse sale de un componente.

Mtodos de la clase MouseEvent


? Point getPoint()
Obtiene la posicin x, y del evento relativa al componente que lo gener.
? Point getX()
Obtiene la posicin x del evento relativa al componente que lo gener.
? Point getY()
Obtiene la posicin y del evento relativa al componente que lo gener.
? int getClickCount()
Obtiene la cantidad de clicks del Mouse asociados con este evento.
? boolean isAltDown()
Verifica si el modificador Alt estaba presionado o no en este evento.
? boolean isControlDown()
Verifica si el modificador Control estaba presionado o no en este evento.
? boolean isMetaDown()
Verifica si el modificador Meta estaba presionado o no en este evento.
? boolean isShiftDown()
Verifica si el modificador Shift estaba presionado o no en este evento.
? Component getComponent()
Obtiene el componente donde fue generado este evento.

Eventos de Movimiento del Mouse


Un evento de Movimiento del Mouse se genera cuando se mueve el Mouse, con botones presionados o
no (muchos de estos eventos son generados). Cuando ocurre un evento de Movimiento del Mouse, el
mtodo relevante en el objeto controlador es invocado, y recibe un objeto MouseEvent.
La clase controladora de los eventos de Mouse se puede crear implementando la interfaz
MouseMotionListener o extendiendo la clase adaptadora MouseMotionAdapter. El objeto controlador
de este tipo de eventos se registra con el mtodo addMouseMotionListener() perteneciente a
cualquier componente (clase Componente).

Mtodos de la interfaz MouseMotionListener (e implementados por MouseMotionAdapter)


? public void mouseMoved( MouseEvent e )
Invocado cuando se ha movido el Mouse sobre un componente (sin botones presionados).
? public void mouseDragged( MouseEvent e )
Invocado cuando se ha movido el Mouse sobre un componente con un botn presionado.

Mtodos de la clase MouseEvent


? (Ver clase Mouse Event de Eventos de Mouse)

POLITECNICO 19
JFC y Swing
Java

Eventos de Ventana
Cuando el estado de una ventana cambia en virtud de ser abierta, cerrada, activada o desactivada,
iconizada o desiconizada, el mtodo relevante en el objeto controlador es invocado, y recibe un objeto
WindowEvent.
La clase controladora de los eventos de Mouse se puede crear implementando la interfaz
WindowListener o extendiendo la clase adaptadora WindowAdapter. El objeto controlador de este
tipo de eventos se registra con el mtodo addWindowListener() perteneciente a cualquier dilogo
(clase JDialog), Frame (clase JFrame) o derivado.

Mtodos de la interfaz WindowListener (e implementados por WindowAdapter)


? public void windowOpened( WindowEvent e )
Invocado la primera vez que la ventana se hace visible.
? public void windowClosed( WindowEvent e )
Invocado cuando se ha cerrado la ventana como resultado de llamar al mtodo dispose en ella.
? public void windowClosing( WindowEvent e )
Invocado cuando el usuario intenta cerrar la ventana desde el men del sistema de la ventana.
? public void windowActivated( WindowEvent e )
Invocado cuando la ventana pasa a ser la activa del usuario, lo que significa que la ventana (o uno de
sus subcomponentes) va a recibir eventos de teclado.
? public void windowDeactivated( WindowEvent e )
Invocado cuando la ventana deja de ser la activa del usuario, lo que significa que la ventana y sus
subcomponentes dejarn de recibir los eventos de teclado.
? public void windowIconified( WindowEvent e )
Invocado cuando la ventana cambia de un estado normal a uno minimizado.
? public void windowDeiconified( WindowEvent e )
Invocado cuando la ventana cambia de un estado minimizado a uno normal.

Mtodos de la clase WindowEvent


? Component getComponent()
Obtiene el componente donde fue generado este evento.
? Window getWindow()
Obtiene la ventana en donde se origin este evento.

Eventos de Accin
Estos eventos representan una accin, definida independientemente para cada componente que los
genere. Cuando ocurre un evento de Accin, el mtodo actionPerformed() del objeto controlador es
invocado, y recibe un objeto ActionEvent.
La clase controladora de los eventos de Accin se puede crear implementando la interfaz
ActionListener. El objeto controlador de este tipo de eventos se registra con el mtodo
addActionListener() perteneciente a los siguientes componentes, que los generan en los casos
mencionados:
? Botones (clase JButton), cuando son presionados;
? Listas (clase JList), cuando se doble-clickea con el Mouse sobre uno de sus elementos;

20 POLITECNICO
? Elementos de men (clase JMenuItem), cuando se selecciona el elemento en un men;
? Y campos de texto (clase JTextField), reciben de a dos eventos por cada tecla que se presiona en
ellos, uno cuando se presiona y otro cuando se suelta la tecla.

Mtodo de la interfaz ActionListener


? public void actionPerformed( ActionEvent e )
Invocado cuando ocurre una accin.

Mtodos de la clase ActionEvent


? String getActionCommand()
Obtiene el nombre del comando asociado con esta accin.

Eventos de Ajuste
Estos eventos representan un ajuste realizado a un valor determinado de un componente. Cuando
ocurre un evento de Ajuste, se invoca el mtodo adjustmentValueChanged() del objeto controlador, y
recibe un objeto AdjustmentEvent.
La clase controladora de los eventos de Accin se puede crear implementando la interfaz
AdjustmentListener. El objeto controlador de este tipo de eventos se registra con el mtodo
addAdjustmentListener() perteneciente a las barras de desplazamiento (clase JScrollbar), y se
genera cada vez que se modifica el valor que representa barra y por lo tanto se hace necesario un ajuste
al valor.

Mtodo de la interfaz ActionListener


? public void adjustmentValueChanged( AdjustmentEvent e )
Invocado cuando el valor de un objeto ajustable cambi.

Mtodos de la clase AdjustmentEvent


? Adjustable getAdjustable()
Obtiene el objeto ajustable que origin este evento.
? int getValue()
Obtiene el valor actual en el evento de ajuste.

Eventos de Elemento
Estos eventos representan un cambio en el estado de los elementos de un componente, normalmente
el estado de seleccin. Cuando ocurre un evento de Elemento, el mtodo itemStateChanged() del
objeto controlador es invocado, y recibe un objeto ItemEvent.
La clase controladora de los eventos de Elemento se puede crear implementando la interfaz
ItemListener. El objeto controlador de este tipo de eventos se registra con el mtodo
addItemListener() perteneciente a los siguientes componentes:
? Seleccin mltiple(clase JComboBox);
? Seleccin booleana (clase JCheckbox);
? Elementos de men booleanos (clase JCheckboxMenuItem);
? Listas (clase JList).

POLITECNICO 21
JFC y Swing
Java

Mtodo de la interfaz ItemListener


? public void itemStateChanged( ItemEvent e )
Invocado cuando un elemento fue seleccionado o deseleccionado.

Mtodos de la clase ItemEvent


? Object getItem()
Obtiene el elemento en donde ocurri el evento.
? ItemSelectable getItemSelectable()
Obtiene el objeto de seleccin de elementos en donde se origin este evento.
? int getStateChange()
Obtiene el tipo de cambio de estado que gener este evento. Este mtodo devuelve una de las dos
constantes: ItemEvent.SELECTED o ItemEvent.DESELECTED.

Eventos de Texto
Estos eventos representan un cambio en el texto de un componente. Cuando el texto del componente
cambia, el mtodo textValueChanged() del objeto controlador es invocado, y recibe un objeto
TextEvent.
La clase controladora de los eventos de Texto se puede crear implementando la interfaz TextListener.
El objeto controlador de este tipo de eventos se registra con el mtodo addTextListener()
perteneciente a los siguientes componentes:
? rea de texto (clase JTextArea);
? Campo de texto (clase JTextField).

Mtodo de la interfaz TextListener


? public void textValueChanged( TextEvent e )
Invocado cuando el valor del texto cambi.

22 POLITECNICO

You might also like