PROGRAMACION JAVA Eventos
PROGRAMACION JAVA Eventos
Tema 5
EVENTOS
STUDIUM
Programación
5.1 Introducción
En el anterior tema hemos visto todas las herramientas necesarias para diseñar nuestros
interfaces gráficos de usuario con elementos como Frames, Buttons, Labels, TextFields,
etcétera.
Pero eran elementos “muertos”, que no respondían a nuestros órdenes. Ahora le vamos
a dar vida a través de los “Eventos”.
Para avanzar un paso más, se resumen a continuación los pasos que se pueden seguir
para construir una aplicación orientada a eventos sencilla, con interface gráfica de
usuario:
1. Determinar los componentes que van a constituir la interface de usuario
(botones, cajas de texto, menús, etc.).
2. Crear una clase para la aplicación que contenga la función main().
3. La función main() deberá crear un objeto de la clase Ventana (en el que se van
a introducir las componentes seleccionadas) y mostrarla por pantalla con el
tamaño y posición adecuados.
4. Añadir al objeto Ventana todos los componentes y menús que deba contener.
Se puede hacer en el constructor de la ventana o en el propio método main().
5. Definir los objetos Listener (objetos que se ocuparán de responder a los eventos,
cuyas clases implementan las distintas interfaces Listener) para cada uno de los
eventos que deban estar soportados. En aplicaciones pequeñas, el propio objeto
Ventana se puede ocupar de responder a los eventos de sus componentes. En
programas más grandes se puede crear uno o más objetos de clases especiales
para ocuparse de los eventos.
6. Finalmente, se deben implementar los métodos de las interfaces Listener que se
vayan a hacer cargo de la gestión de los eventos.
En este capítulo nos centraremos en esta sexta parte (y un poco en la quinta). Aquí
aprenderemos a dar “vida” a nuestras aplicaciones de forma que respondan a órdenes.
Toda gira en torno a los eventos. Un evento, según la Real Academia de la Lengua es un
“Acaecimiento. Eventualidad, hecho imprevisto, o que puede acaecer.” Es decir, algo que
puede ocurrir, suceder, acaecer, ... en nuestra aplicación. ¿Y qué eventos pueden ocurrir
en nuestras aplicaciones? Pues desde errores, hasta pulsaciones del ratón en ciertos
botones o partes de la ventana, selecciones de opciones, escritura de texto, ... Por
ejemplo, nuestras aplicaciones deben cerrarse al pulsar sobre el icono de la Barra de
Título que tiene dicho fin:
Pues bien, para que nuestras aplicaciones puedan reaccionar ante las acciones del
usuario, o de otro programa, o del sistema, ... debemos realizar lo que hemos llamado la
Gestión de los Eventos. Cada componente tiene una serie de eventos ante los que
responde. Esos eventos, cuando se producen, son “escuchados” por unas clases
Página 1 de 45
Programación
Los Listeners son clases Abstracta ya declaradas. Nuestra labor será la de implementar
los procedimientos de los Listeners que nos sirvan en cada momento de forma que
nuestra aplicación haga lo que se le haya programado en el momento en que se haya
dispuesto. Por ejemplo, que se envíe un documento a la impresora al pulsar un botón.
Dicho botón tendrá un Listener a la espera de que sea pulsado. En ese momento se
ejecutará el código asignado al evento relacionado con dicho Listener.
1. Cada objeto que puede recibir un evento (event source), “registra” uno o más objetos
para que los gestionen (event listener). Esto se hace con un método que tiene la forma,
eventSourceObject.addEventListener(eventListenerObject);
Obsérvese que el nombre de la interface coincide con el nombre del evento, sustituyendo
la palabra Event por Listener.
2. Una vez registrado el objeto que gestionará el evento, perteneciente a una clase que
implemente la correspondiente interface Listener, se deben definir los métodos de dicha
interface. Siempre hay que definir todos los métodos de la interface, aunque algunos de
dichos métodos puedan estar “vacíos”.
Página 2 de 45
Programación
Las clases Adapter derivan de Object, y son clases predefinidas que contienen
definiciones vacías para todos los métodos de la interface. Para crear un objeto que
responda al evento, en vez de crear una clase que implemente la interface Listener, basta
crear una clase que derive de la clase Adapter correspondiente, y redefina sólo los
métodos de interés.
Página 3 de 45
Programación
Página 4 de 45
Programación
Se muestran las tablas con los eventos que se pueden producir sobre los diferentes
componentes, lo que significan, los Listeners asociados que tenemos que implementar
para poder tratar dichos eventos y los métodos con que cuentan dichos Listeners.
Button
Eventos Generados Significado Listener Métodos del Listener
ActionEvent Pulsar sobre el ActionListener actionPerformed()
componente con el
ratón
ComponentEvent Mover, cambiar el ComponentListener componentHidden(),
tamaño, mostrar u componentMoved(),
ocultar el componente componentResized(),
componentShown()
FocusEvent Obtener o perder el FocusListener focusGained(), focusLost()
foco
KeyEvent Pulsar o soltar una KeyListener keyPressed(), keyReleased(),
tecla keyTyped()
MouseEvent Pulsar o soltar un MouseListener mouseClicked(),
botón del ratón; entrar mouseEntered(),
o salir de un mouseExited(),
componente; mousePressed(),
(tener en cuenta que mouseReleased()
este evento tiene dos
Listener)
MouseMotionEvent Mover o arrastrar el MouseMotionListener mouseDragged(),
ratón mouseMoved()
Página 5 de 45
Programación
Canvas
Eventos Generados Significado Listener Métodos del Listener
ComponentEvent Mover, cambiar el tamaño, ComponentListener componentHidden(),
mostrar u ocultar el componentMoved(),
componente componentResized(),
componentShown()
FocusEvent Obtener o perder el foco FocusListener focusGained(),
focusLost()
KeyEvent Pulsar o soltar una tecla KeyListener keyPressed(),
keyReleased(),
keyTyped()
MouseEvent Pulsar o soltar un botón MouseListener mouseClicked(),
del ratón; entrar o salir de mouseEntered(),
un componente; mouseExited(),
(tener en cuenta que este mousePressed(),
evento tiene dos Listener) mouseReleased()
MouseMotionEvent Mover o arrastrar el ratón MouseMotionListener mouseDragged(),
mouseMoved()
Página 6 de 45
Programación
Checkbox
Eventos Generados Significado Listener Métodos del Listener
ComponentEvent Mover, cambiar el ComponentListener componentHidden(),
tamaño, mostrar u componentMoved(),
ocultar el componentResized(),
componente componentShown()
FocusEvent Obtener o perder el FocusListener focusGained(), focusLost()
foco
ItemEvent Seleccionar o ItemListener itemStateChanged()
deseleccionar un
elemento
KeyEvent Pulsar o soltar una KeyListener keyPressed(), keyReleased(),
tecla keyTyped()
MouseEvent Pulsar o soltar un MouseListener mouseClicked(),
botón del ratón; mouseEntered(),
entrar o salir de un mouseExited(),
componente; mousePressed(),
(tener en cuenta que mouseReleased()
este evento tiene dos
Listener)
MouseMotionEvent Mover o arrastrar el MouseMotionListener mouseDragged(),
ratón mouseMoved()
CheckboxMenuItem
Eventos Generados Significado Listener Métodos del Listener
ItemEvent Seleccionar o deseleccionar ItemListener itemStateChanged()
un elemento
Choice
Idéntica tabla al CheckBox
Component
Idéntica tabla al Canvas
Página 7 de 45
Programación
Container
Eventos Generados Significado Listener Métodos del Listener
ComponentEvent Mover, cambiar el ComponentListener componentHidden(),
tamaño, mostrar u componentMoved(),
ocultar el componentResized(),
componente componentShown()
ContainerEvent Añadir o eliminar un ContainerListener componentAdded(),
componente a un componentRemoved()
contenedor
FocusEvent Obtener o perder el FocusListener focusGained(), focusLost()
foco
KeyEvent Pulsar o soltar una KeyListener keyPressed(), keyReleased(),
tecla keyTyped()
MouseEvent Pulsar o soltar un MouseListener mouseClicked(),
botón del ratón; mouseEntered(),
entrar o salir de un mouseExited(),
componente; mousePressed(),
(tener en cuenta mouseReleased()
que este evento
tiene dos Listener)
MouseMotionEvent Mover o arrastrar el MouseMotionListener mouseDragged(),
ratón mouseMoved()
Página 8 de 45
Programación
Dialog
Eventos Generados Significado Listener Métodos del Listener
ComponentEvent Mover, cambiar el ComponentListener componentHidden(),
tamaño, mostrar u componentMoved(),
ocultar el componente componentResized(),
componentShown()
ContainerEvent Añadir o eliminar un ContainerListener componentAdded(),
componente a un componentRemoved()
contenedor
FocusEvent Obtener o perder el FocusListener focusGained(), focusLost()
foco
KeyEvent Pulsar o soltar una KeyListener keyPressed(), keyReleased(),
tecla keyTyped()
MouseEvent Pulsar o soltar un MouseListener mouseClicked(),
botón del ratón; entrar mouseEntered(),
o salir de un mouseExited(),
componente; mousePressed(),
(tener en cuenta que mouseReleased()
este evento tiene dos
Listener)
MouseMotionEvent Mover o arrastrar el MouseMotionListener mouseDragged(),
ratón mouseMoved()
WindowEvent Acciones sobre WindowListener windowActivated(),
ventanas: abrir, cerrar, windowDeactivated(),
iconizar, restablecer e windowClosed(),
iniciar el cierre windowClosing(),
windowIconified(),
windowDeiconified(),
windowOpened()
Frame
Idéntica tabla al Dialog
Label
Idéntica tabla al Canvas
Página 9 de 45
Programación
List
Eventos Generados Significado Listener Métodos del Listener
ActionEvent Pulsar sobre el ActionListener actionPerformed()
componente con el
ratón
ComponentEvent Mover, cambiar el ComponentListener componentHidden(),
tamaño, mostrar u componentMoved(),
ocultar el componentResized(),
componente componentShown()
FocusEvent Obtener o perder el FocusListener focusGained(), focusLost()
foco
ItemEvent Seleccionar o ItemListener itemStateChanged()
deseleccionar un
elemento
KeyEvent Pulsar o soltar una KeyListener keyPressed(), keyReleased(),
tecla keyTyped()
MouseEvent Pulsar o soltar un MouseListener mouseClicked(),
botón del ratón; mouseEntered(),
entrar o salir de un mouseExited(),
componente; mousePressed(),
mouseReleased()
MouseMotionEvent Mover o arrastrar el MouseMotionListener mouseDragged(),
ratón mouseMoved()
MenuItem
Eventos Generados Significado Listener Métodos del Listener
ActionEvent Pulsar sobre el componente con el ActionListener actionPerformed()
ratón
Panel
Idéntica tabla al Container
Página 10 de 45
Programación
Scrollbar
Eventos Generados Significado Listener Métodos del Listener
AdjustmentEvent Cambiar el valor del AdjustmentListener adjustmentValueChanged()
Scrollbar
ComponentEvent Mover, cambiar el ComponentListener componentHidden(),
tamaño, mostrar u componentMoved(),
ocultar el componentResized(),
componente componentShown()
FocusEvent Obtener o perder el FocusListener focusGained(), focusLost()
foco
KeyEvent Pulsar o soltar una KeyListener keyPressed(), keyReleased(),
tecla keyTyped()
MouseEvent Pulsar o soltar un MouseListener mouseClicked(), mouseEntered(),
botón del ratón; mouseExited(), mousePressed(),
entrar o salir de un mouseReleased()
componente;
(tener en cuenta que
este evento tiene
dos Listener)
MouseMotionEvent Mover o arrastrar el MouseMotionListener mouseDragged(),
ratón mouseMoved()
TextArea
Eventos Generados Significado Listener Métodos del Listener
ComponentEvent Mover, cambiar el tamaño, ComponentListener componentHidden(),
mostrar u ocultar el componentMoved(),
componente componentResized(),
componentShown()
FocusEvent Obtener o perder el foco FocusListener focusGained(),
focusLost()
KeyEvent Pulsar o soltar una tecla KeyListener keyPressed(),
keyReleased(),
keyTyped()
MouseEvent Pulsar o soltar un botón MouseListener mouseClicked(),
del ratón; entrar o salir de mouseEntered(),
un componente; mouseExited(),
(tener en cuenta que este mousePressed(),
evento tiene dos Listener) mouseReleased()
MouseMotionEvent Mover o arrastrar el ratón MouseMotionListener mouseDragged(),
mouseMoved()
TextEvent Cambiar el texto TextListener textValueChanged()
Página 11 de 45
Programación
TextField
Eventos Generados Significado Listener Métodos del Listener
ActionEvent Pulsar sobre el ActionListener actionPerformed()
componente con el
ratón
ComponentEvent Mover, cambiar el ComponentListener componentHidden(),
tamaño, mostrar u componentMoved(),
ocultar el componentResized(),
componente componentShown()
FocusEvent Obtener o perder FocusListener focusGained(), focusLost()
el foco
KeyEvent Pulsar o soltar una KeyListener keyPressed(), keyReleased(),
tecla keyTyped()
MouseEvent Pulsar o soltar un MouseListener mouseClicked(),
botón del ratón; mouseEntered(),
entrar o salir de un mouseExited(),
componente; mousePressed(),
(tener en cuenta mouseReleased()
que este evento
tiene dos Listener)
MouseMotionEvent Mover o arrastrar MouseMotionListener mouseDragged(),
el ratón mouseMoved()
TextEvent Cambiar el texto TextListener textValueChanged()
Window
Idéntica tabla a Dialog
Hasta aquí las tablas con todos los Componentes, Eventos, Listeners y Métodos de éstos.
En el apartado siguiente, veremos unos ejemplos para aclarar la forma de programar
nuestras aplicaciones gestionando los eventos.
Página 12 de 45
Programación
import java.awt.*;
//Tenemos que importar la clase event que contiene a los Listeners
import java.awt.event.*;
Página 13 de 45
Programación
import java.awt.*;
import java.awt.event.*;
public EventoBotonCerrar()
{
setLayout(new FlowLayout());
setTitle("Botón que cierra la ventana");
add(btnBoton);
addWindowListener(this);
//Añadir el listener al botón
btnBoton.addActionListener(this);
Página 14 de 45
Programación
setSize(100,100);
setVisible(true);
}
El siguiente ejemplo mostrará dos botones en pantalla y una etiqueta. Al pulsar un botón,
en la etiqueta aparecerá el nombre del botón pulsado. Con este ejemplo vamos a ver la
forma de diferenciar qué botón se ha pulsado.
package es.studium.EventoBotones;
import java.awt.*;
import java.awt.event.*;
Página 15 de 45
Programación
{
private static final long serialVersionUID = 1L;
Button btnBoton1 = new Button("Uno");
Button btnBoton2 = new Button("Dos");
Label lblEtiqueta = new Label("");
public EventoBotones()
{
setLayout(new FlowLayout());
setTitle("Diferenciar botones");
add(btnBoton1);
add(btnBoton2);
add(lblEtiqueta);
addWindowListener(this);
btnBoton1.addActionListener(this);
btnBoton2.addActionListener(this);
setSize(300,100);
setVisible(true);
}
Página 16 de 45
Programación
Veamos ahora un programa que maneja un Canvas. Al pulsar una tecla sobre él,
cambiará de color de fondo.
package es.studium.EventoCanvas;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
Página 17 de 45
Programación
public EventoCanvas()
{
setLayout(new FlowLayout());
setTitle("Canvas");
add(cvCanvas);
setSize(300,100);
// Obtener el foco para el canvas para que al pulsar una
// tecla se active el evento correspondiente del canvas
cvCanvas.requestFocus();
// Añadir el listener al frame
addKeyListener(this);
addWindowListener(this);
setVisible(true);
}
Página 18 de 45
Programación
El siguiente ejemplo nos mostrará la forma de trabajar con los Checkboxes. Tendremos
una ventana con tres opciones y tres etiquetas. Al seleccionar una opción, en su etiqueta
correspondiente aparecerá la palabra “Activado”. Al deseleccionar una opción, aparecerá
la palabra “Desactivado”
package es.studium.EventoCheckbox1;
import java.awt.Checkbox;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
Página 19 de 45
Programación
public EventoCheckbox1()
{
setLayout(new FlowLayout());
setTitle("Botones de Opción");
add(chkUno);
add(lblEtiqueta1);
add(chkDos);
add(lblEtiqueta2);
add(chkTres);
add(lblEtiqueta3);
addWindowListener(this);
// Añadir los listeners a los botones de opción
chkUno.addItemListener(this);
chkDos.addItemListener(this);
chkTres.addItemListener(this);
setSize(500,100);
setVisible(true);
}
Página 20 de 45
Programación
Página 21 de 45
Programación
A continuación, veremos la forma de trabajar con los Checkboxes pero que solamente
esté seleccionado uno a la vez, es decir usando opciones excluyentes. Para ello
simplemente modificaremos el anterior ejemplo y usaremos un CheckboxGroup para
agrupar las opciones y así indicar que solamente queremos que esté activa una cada vez.
package es.studium.EventoCheckbox2;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
Página 22 de 45
Programación
public EventoCheckbox2()
{
setLayout(new FlowLayout());
setTitle("Botones de Opción con sólo uno activo");
add(chkUno);
add(lblEtiqueta1);
add(chkDos);
add(lblEtiqueta2);
add(chkTres);
add(lblEtiqueta3);
addWindowListener(this);
chkUno.addItemListener(this);
chkDos.addItemListener(this);
chkTres.addItemListener(this);
setSize(500, 100);
setResizable(false);
setVisible(true);
}
Página 23 de 45
Programación
{
lblEtiqueta1.setText("Desactivado");
lblEtiqueta2.setText("Desactivado");
lblEtiqueta3.setText("Activado");
}
}
public void windowActivated(WindowEvent we) {}
public void windowClosed(WindowEvent we) {}
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
public void windowDeactivated(WindowEvent we) {}
public void windowDeiconified(WindowEvent we) {}
public void windowIconified(WindowEvent we) {}
public void windowOpened(WindowEvent we) {}
}
A continuación, veremos cómo se trabaja con Choice. Mostraremos una ventana con una
lista de tres colores. Al elegirlos, cambiaremos el fondo de la pantalla al color elegido:
package es.studium.EventoChoice;
import java.awt.Choice;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
Página 24 de 45
Programación
public EventoChoice()
{
setLayout(new FlowLayout());
setTitle("Lista");
//Añadimos a la lista los elementos que la componen
lista.add("Blanco");
lista.add("Rojo");
lista.add("Azul");
//Añadimos la lista
add(lista);
addWindowListener(this);
//Añadimos el listener a la lista
lista.addItemListener(this);
setSize(300, 200);
setVisible(true);
}
Página 25 de 45
Programación
setBackground(Color.red);
}
else
{
setBackground(Color.blue);
}
}
public void windowActivated(WindowEvent we) {}
public void windowClosed(WindowEvent we) {}
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
public void windowDeactivated(WindowEvent we) {}
public void windowDeiconified(WindowEvent we) {}
public void windowIconified(WindowEvent we) {}
public void windowOpened(WindowEvent we) {}
}
Para mostrar un ejemplo de eventos con Containers, veremos uno con la clase Dialog.
Se mostrará un Frame con un botón. Al pulsar dicho botón, aparecerá un diálogo con
un mensaje. Al cerrar el Dialog, volveremos al Frame principal.
package es.studium.EventoDialog;
import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
Página 26 de 45
Programación
import java.awt.event.WindowListener;
public EventoDialog()
{
//Definir la Ventana principal
setLayout(new FlowLayout());
setTitle("Ventana con Diálogo");
setSize(300, 100);
add(btnBoton);
btnBoton.addActionListener(this);
addWindowListener(this);
//Definir el Diálogo
dlgUno.setLayout(new FlowLayout());
dlgUno.add(lblEtiqueta);
dlgUno.setSize(200,150);
//Para poder cerrar el Diálogo
dlgUno.addWindowListener(this);
setVisible(true);
}
Página 27 de 45
Programación
Pasaremos a continuación a ver un ejemplo para manejo de Listas. Se mostrará una lista
con 6 colores y al seleccionar uno, cambiará el color de fondo de la aplicación. No se
permitirá selección múltiple al no tener sentido.
package es.studium.EventoList;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
Página 28 de 45
Programación
public EventoList()
{
setLayout(new FlowLayout());
setTitle("Lista con colores");
lista.add("Blanco");
lista.add("Rojo");
lista.add("Azul");
lista.add("Verde");
lista.add("Amarillo");
lista.add("Naranja");
add(lista);
addWindowListener(this);
// Para implementar el doble clic del ratón
// Si sólo quisiéramos una pulsación, lista.addItemListener
lista.addActionListener(this);
setSize(250, 200);
setVisible(true);
}
Página 29 de 45
Programación
else if("Verde".equals(lista.getSelectedItem()))
{
setBackground(Color.green);
}
else if("Amarillo".equals(lista.getSelectedItem()))
{
setBackground(Color.yellow);
}
else if("Naranja".equals(lista.getSelectedItem()))
{
setBackground(Color.orange);
}
else
{
setBackground(Color.white);
}
}
public void windowActivated(WindowEvent we) {}
public void windowClosed(WindowEvent we) {}
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
public void windowDeactivated(WindowEvent we) {}
public void windowDeiconified(WindowEvent we) {}
public void windowIconified(WindowEvent we) {}
public void windowOpened(WindowEvent we) {}
}
El ejemplo próximo muestra la forma de gestionar los eventos con los Scrollbar.
Tenemos una pantalla con un scrollbar horizontal y un cuadro de texto donde se muestra
el valor actual del scrollbar.
Página 30 de 45
Programación
package es.studium.EventoScrollbar;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Scrollbar;
import java.awt.TextField;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
add("North", scrHorizontal);
add("South", txtCampo);
scrHorizontal.addAdjustmentListener(this);
addWindowListener(this);
setSize(200, 100);
setVisible(true);
}
Página 31 de 45
Programación
System.exit(0);
}
public void windowDeactivated(WindowEvent we) {}
public void windowDeiconified(WindowEvent we) {}
public void windowIconified(WindowEvent we) {}
public void windowOpened(WindowEvent we) {}
public void adjustmentValueChanged(AdjustmentEvent ae)
{
txtCampo.setText(Integer.toString((ae.getValue())));
}
}
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
Página 32 de 45
Programación
public EventoTexto()
{
setLayout(new FlowLayout());
setTitle("TextField y TextArea");
add(lblEtiqueta);
add(txtCampo1);
add(btnBoton);
add(txaCampo2);
btnBoton.addActionListener(this);
//Añadir el listener al textfield para poder escribir en él
txtCampo1.addTextListener(this);
addWindowListener(this);
setSize(300, 200);
setVisible(true);
}
Página 33 de 45
Programación
txaCampo2.setText(txaCampo2.getText()+" "+cadena);
}
// Si no, lo pasamos a la línea siguiente
else
{
txaCampo2.setText(txaCampo2.getText()+"\n"+cadena);
longitud = cadena.length();
}
// Borramos lo que haya en el textfield
txtCampo1.setText("");
}
public void windowActivated(WindowEvent we) {}
public void windowClosed(WindowEvent we) {}
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
public void windowDeactivated(WindowEvent we) {}
public void windowDeiconified(WindowEvent we) {}
public void windowIconified(WindowEvent we) {}
public void windowOpened(WindowEvent we) {}
}
Por último, veremos la forma de trabajar con los Menús. Veremos dos ejemplos: uno con
el típico menú en una barra con opciones y el otro ejemplo será un Popup Menú, es
decir, un menú emergente que aparece al pulsar con el ratón en una zona definida de la
pantalla.
Empezaremos por la barra de menú. Dicha barra tendrá dos opciones: Colores y Salir.
Dentro de Colores nos encontraremos con otras dos opciones: Rojo y Blanco. Al elegir
una de ellas se pondrá el fondo del color indicado.
package es.studium.EventoMenu;
Página 34 de 45
Programación
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public EventoMenu()
{
setLayout(new FlowLayout());
setTitle("Barra de Menú");
// Crear el primer submenú añadiendo las opciones
mn1.add(mn11);
// Añadir un Separador
mn1.addSeparator();
mn1.add(mn12);
// Crear el segundo submenu
mn2.add(mn21);
// Añadir los submenús, a la barra de menú
mnbMenu.add(mn1);
mnbMenu.add(mn2);
// Establecer la Barra de Menú como tal
setMenuBar(mnbMenu);
Página 35 de 45
Programación
setSize(250,150);
addWindowListener(this);
// Se añaden los Listeners a las opciones de los submenús
// no a las opciones del menú
mn11.addActionListener(this);
mn12.addActionListener(this);
mn21.addActionListener(this);
setVisible(true);
}
public static void main(String[] args)
{
new EventoMenu();
}
public void actionPerformed(ActionEvent ae)
{
Object a;
a=ae.getSource();
if(a.equals(mn21))
{
System.exit(0);
}
else if(a.equals(mn11))
{
setBackground(Color.red);
}
else
{
setBackground(Color.white);
}
}
public void windowActivated(WindowEvent we) {}
public void windowClosed(WindowEvent we) {}
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
public void windowDeactivated(WindowEvent we) {}
public void windowDeiconified(WindowEvent we) {}
public void windowIconified(WindowEvent we) {}
Página 36 de 45
Programación
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public EventoMenuPopup()
{
setLayout(new FlowLayout());
Página 37 de 45
Programación
setTitle("Menú Pop-up");
// Añadimos el botón
add(btnBoton);
// Añadimos las opciones al menú
ppMenu.add(mnUno);
ppMenu.add(mnDos);
// Añadimos el menú
add(ppMenu);
setSize(250,100);
setVisible(true);
}
Página 38 de 45
Programación
setBackground(Color.white);
}
}
public void windowActivated(WindowEvent we) {}
public void windowClosed(WindowEvent we) {}
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
public void windowDeactivated(WindowEvent we) {}
public void windowDeiconified(WindowEvent we) {}
public void windowIconified(WindowEvent we) {}
public void windowOpened(WindowEvent we) {}
}
Otra posibilidad para trabajar con los eventos sería utilizar clases Adapters en lugar de
clases Listeners. De esta forma se hereda de WindowAdapter, no se implementan
interfaces, con lo cual nos ahorramos por un lado la definición de métodos, pero, por
otro lado, nuestra clase principal ya no puede heredar de Frame, con lo cual tendremos
que crear nuestro propio Frame.
Veamos un ejemplo de una ventana que, al pulsar el botón de cierre, se cierra, pero ahora
mediante el uso de un Adapter:
package es.studium.UsoAdapter;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
Página 39 de 45
Programación
public UsoAdapter()
{
// Ahora hay que referirse a f
frm.setLayout(new FlowLayout());
frm.addWindowListener(this);
frm.setSize(200,200);
frm.setVisible(true);
}
// Solamente definiremos el método de WindowListener que
// necesitemos, en este caso windowClosing
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
public static void main(String[] args)
{
new UsoAdapter();
}
}
Otro ejemplo más. En este caso vamos a mostrar una ventana con un botón centrado
tanto horizontal como verticalmente. Y, además, si redimensionamos la ventana, el botón
se recolocará siempre en dicho centro.
package es.studium.Centrado;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
Página 40 de 45
Programación
public Centrado()
{
setLayout(new FlowLayout());
setSize(500, 600);
addWindowListener(this);
add(boton1);
addComponentListener(this);
boton1.setLocation((getWidth()/2)-
(boton1.getWidth()/2),(getHeight()/2)-(boton1.getHeight()/2));
setVisible(true);
}
Página 41 de 45
Programación
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CardLayout;
import java.awt.Choice;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
Página 42 de 45
Programación
public AwtCard()
{
// Establecer distribución del Frame
setLayout( new BorderLayout() );
// Añadir elementos al Choice
c.addItem( PanelBoton );
c.addItem( PanelTexto );
// Añadir el Choice al panel ac
ac.add( c );
// Añadir el panel ac al Frame en la parte superior
add( "North",ac );
// Establecer distribución del panel card
card.setLayout( new CardLayout() );
Página 43 de 45
Programación
Página 44 de 45
Programación
}
}
}
// Fin de la clase
11/10/2020
Página 45 de 45