You are on page 1of 26

Tema 19- Interfaces visuales (Componentes Swing)-I

Los diseadores de Java denominan JFC (Java Foundation Classes) a un con junto de
clases especialmente diseadas para ayudar al desarrollo de aplicaciones graficas en Java,
estas estn agrupadas en AWT, Swing y Accesibility API.
Una interfaz es lo que le permite a un usuario comunicarse con un programa.
Una interfaz es lo que nosotros vemos al arrancar, por ejemplo, un navegador de
internet: un conjunto de mens, botones, barras.... que nos permiten activar un cdigo que es
el que realmente nos llevar a una pgina web, salvar la imagen en el disco duro....
Los paquetes java.awt y javax.swing, junto con varios subpaquetes de stos, son los
encargados de proporcionar las clases necesarias para construir interfaces grficas de usuario
(conocidas habitualmente por GUI, del ingls Graphical User Interface).
El primer paquete, java.awt, surge en las primeras versiones de Java y pronto se
encontraron desventajas en su utilizacin. El principal inconveniente de java.awt es que la
percepcin de una aplicacin realizada con este paquete es distinta dependiendo del sistema
operativo que se utilice.
En AWT cuando aadamos un botn, por ejemplo, a nuestro diseo el compilador
generaba cdigo que le peda al sistema operativo la creacin de un botn en un determinado
sitio con unas determinadas propiedades;
El motivo es que esta biblioteca genera una representacin virtual de los componentes
de la interfaz de usuario y es el propio sistema operativo el encargado de representar
visualmente cada componente. Dado que cada sistema operativo tiene su propia manera de
representarlos, el resultado final puede variar de un sistema a otro.
Para solucionar ese problema se defini el paquete javax.swing. Esta biblioteca ya no
utilizaba los componentes del sistema operativo para la realizacin de interfaces de usuario,
sino que defina sus propios componentes.
Esta independencia de los sistemas operativos en los que se ejecutar la aplicacin
permite que se perciba con el mismo aspecto en todos.
Adems, sta no est condicionada por la necesidad de que el sistema operativo tenga
un componente para representarlo, por lo que la biblioteca define su propio conjunto de
componentes, ms rico que el de cualquier sistema operativo.
Sin embargo, la biblioteca Swing no nace desde cero, sino que se apoya en el diseo de
la biblioteca AWT (Abstract Window Toolkit).

modelo/vista/controlador

Se trata del modelo fundamental del trabajo con interfaces de usuario por parte de
Swing. Consiste en tres formas de abstraccin. Un mismo objeto se ve de esas tres formas:
Modelo. Se refiere al modelo de datos que utiliza el objeto. Es la informacin que
se manipula mediante el objeto Swing.
Vista. Es cmo se muestra el objeto en la pantalla.
Controlador. El controlador es el encargado de actuar cuando el usuario decide
realizar una accin sobre un elemento visible y activo de la vista. Por ejemplo:
cuando se pulsa un botn, o la tecla de retorno de carro sobre un campo de texto
El patrn MVC separa los datos y la funcionalidad de la aplicacin (el modelo) de su
representacin (la vista) y de la forma en que se interacta con el modelo a travs de la vista
(el controlador).

Elementos de Swing
Los elementos que forman parte de una interfaz grfica se denominan componentes.
Entre los componentes existen unos especializados que se denominan contenedores. Un
contenedor es un componente capaz de almacenar otros componentes.
Estos contenedores se subdividen en superiores e intermedios.

Los contenedores superiores forman la base para la realizacin de interfaces grficas de


usuario en Java.
Los distintos contenedores superiores son proporcionados por las clases JFrame,
JDialog y JApplet.
La clase JFrame se utiliza para realizar aplicaciones con interfaz grfica en Java.
La clase JDialog se utiliza para realizar ventanas de peticin de datos al usuario.
La clase JApplet se utiliza para realizar aplicaciones de interfaz grfica que se ejecutan dentro
de un navegador web.
Los contenedores intermedios son los encargados de almacenar los componentes
visuales de la aplicacin. Adems, stos pueden incluir otros contenedores, lo que proporciona
un modelo muy flexible para realizar aplicaciones con una interfaz compleja.
JFRAME
Es el contenedor que emplearemos para situar en l todos los dems componentes que
necesitemos para el desarrollo de la interface de nuestro programa.
Es una ventana de nivel superior que tiene ttulo y bordes
Entre otras propiedades el JFRAME tenemos:
Para que una ventana no se pueda redimensionar: setResizable(true);
Para centrar la ventana: setLocationRelativeTo(null);
Dimensionar la ventana al tamao de la pantalla:
Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
Nombreformulario.setSize(screenSize);

Hay que importar tanto la clase Dimension, como la clase Toolkit y hay que colocarlo en
el constructor despus de declarar el formulario;
private void initialize() {
frmConcesionarioAbrahan = new JFrame();
frmConcesionarioAbrahan.setTitle("Concesionario S13");
frmConcesionarioAbrahan.getContentPane().setBackground(Color.BLACK);
frmConcesionarioAbrahan.setResizable(false);
frmConcesionarioAbrahan.setBounds(100, 100, 451, 342);
frmConcesionarioAbrahan.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
frmConcesionarioAbrahan.setSize(screenSize);
}
Maximizar la ventana que ya aparezca de entrada:
frmConcesionarioAbrahan.setExtendedState(JFrame.MAXIMIZED_BOTH);
Quitar el marco (sin titulo, y sin los botones (_
X)
frmConcesionarioAbrahan.setUndecorated(true);
Ajustar ventana (Hacer que todos los componentes contenidos en la ventana se vayan
ajustando a sus respectivos tamaos, partiendo del tamao de la ventana).
Este mtodo debe ser el ltimo en ser llamado: pack()
NOTA: En el caso de que trabajemos con componentes swing:
Normalmente los componentes no van sobre el frame, sino que se colocan en un
contenedor intermedio JPanel,
Es el contenedor intermedio ms utilizado
No tiene representacin grfica es para estructurar el contenido,
aunque se le pueden aadir bordes
Para poner ttulo a un JPanel:
jPanel.setBorder(BorderFactory.createTitledBorder("Es el Titulo"));
Todos los contenedores llevan una disposicin por defecto, aunque existen otras ya
incorporadas en la API de Swing.
FlowLayout
Los componentes se colocan centrados comenzando a la izquierda hasta llenar la lnea, y se
pasa a la siguiente
BorderLayout
Se ponen los componentes en un lateral o en el centro indicando una direccin: East, West,
North, South, Center
GridLayout
Se colocan los componentes de izquierda a derecha y de arriba a abajo en una rejilla
rectangular de n filas por m columnas
BoxLayout
Se colocan los componentes de acuerdo con uno de los dos ejes : vertical u horizontal

Normalmente colocaremos JPanel sobre el rea "Center" del JFrame, y si queremos


tener libertad absoluta a la hora de posicionar un control en el contenedor JPanel deberemos
cambiar la propiedad layout a null.

Nosotros trabajaremos con componentes WindowBuilder, en este caso no hay que


incorporarles el panel puesto que ya lo trean por defecto. Si hay que cambiar la propiedad
layout a absolute para poder colocar todos los componentes donde queramos.
Tambin podemos usar groupLayout() para que los componentes se adapten al
formulario.
Para realizar estos ejercicios utilizaremos el plugins Windows Builder
(Mirar documento de cmo instalar nuevos plugins) (ya lo tenemos instalado)

Una vez instalado:


Inicia un nuevo proyecto con nombre : NuevoVisual
Men Archivo > Nuevo > Proyecto Java
Ahora en el proyecto agrega el siguiente elemento:
Men Archivo > Nuevo > Otras >WindowBuilder > Swing Designer > Aplication
Window y le das el mismo nombre :NuevoVisual

El resultado ser similar a

Antes de seguir recordemos el cdigo generado por WindowBuilder:

Propiedades
Las propiedades de los componentes son las caractersticas particulares que
podemos darle a cada uno. Son por ejemplo: El tamao, color de fondo, tipo de letra
Pero definir y aprender todas las propiedades de cada componente es una tarea casi
imposible, dado que estn todas definidas en la API y adems los entornos de trabajo las
tienen todas definidas y muestran un interface para interactuar con ellas evitando que
debamos modificarlas directamente sobre el cdigo.
Un ejemplo de una parte de las propiedades de un botn que nos ofrece el entorno de
Eclipse es:
Si queremos ver ms propiedades, se
pulsa el botn visualizar propiedades
avanzadas

Por ejemplo:
Para poner el titulo se usa la propiedad title, si se hace en programacin setTitle(nuevo
nombre)

NOTA: Los objetos que necesitamos consultar o modificar en tiempo de ejecucin


debemos defirnirlos como atributos de clase. para ello dentro de
Eclipse->Ventana->preferencias->WindowBuilder->Swing-> CodeGeneration,
marcar Field

Tambin podemos seleccionar un determinado control y en el panel de propiedades del objeto


en el botn Convert local to field, sino aparece el botn, sobre el componente botn derecho
(rename)

Las clases de interfaz grfica con los que trabajaremos son:

La clase JLabel, que define un letrero en la pantalla.


La clase JButton, que define un botn.
La clase JTextField, que define una caja de texto en donde podemos escribir o mostrar
datos.
La clase JRadioButton, que permite seleccionar, de un conjunto de botones,
determinado botn y al mismo tiempo deseleccionar los dems botones de esta clase.
La clase JCheckBox, que permite seleccionar o deseleccionar un atributo.
La clase JComboBox que permite seleccionar, de un conjunto de opciones, nicamente
una opcin.
La clase JSlider que permite seleccionar algn dato numrico de un rango determinado.

Todas las clases con las que vamos a trabajar tienen una serie de propiedades que podemos
variar en modo diseo o en modo programacin que son:
Diseo
Cambiar el texto actual
Text
JComboBox y el JSlider no cuentan con este mensaje.

Programacin
setText(String texto);

Cambiar el tamao del objeto

Size

setSize(int ancho, int alto);

Cambiar el tipo de fuente

Font

setFont("Helvetica", 1, 20);

Cambiar el color de fondo del objeto

background

setBackground(0, 255, 0);

Cambiar el color del texto


Foreground
setForeground(0, 255, 0);
Resaltar el borde del objeto BorderPainted
setBorderPainted(Boolean b); Solo existe para
estas tres clases: JButton, JRadioButton, JCheckBox.
Cambiar la ubicacin del objeto Location
setLocation(nuevaX, nuevaY);
Tambin tenemos getX( ) y getY( ), los cuales devuelven la posicin actual del objeto, de esta
forma puedes desplazarlos respecto a su posicin original.
Definir el tamao y ubicacin

Bounds

setBounds(10,10,400,300)

Los procesos de entrada o captura de datos y procesos de salida de informacin son


procesos bsicos en cualquier programa o aplicacin de cualquier lenguaje de programacin.
Para aplicaciones por consola ya se vieron las instrucciones respectivas, para el caso de
aplicaciones visuales, este problema de e/s se resuelve usando componentes o controles
especializados en cada una de las tareas respectivas.
En java para una aplicacin sencilla se ocupan los siguientes objetos:
1.- Un contenedor apropiado para todos los dems objetos, para este caso un objeto de tipo
jFrame.
2.-Componentes o controles que permitan desplegar textos o mensajes estticos jLabel
3.-Componentes o controles que permitan capturar datos y/o desplegar datos o informacin,
jTextField.
4.-Componentes o controles que permitan controlar o dirigir las conductas y cdigos de los
dems elementos de la aplicacin o programa, jButton.
Etiquetas: JLabel
Este componente se utiliza para desplegar textos o mensajes estticos, textos tales
como encabezados, solicitud al usuario del programa para que proporcione algn dato o
informacin (edad, dame sueldo, etc.).De todos los componentes de interfaz de usuario que
proporciona Java, las etiquetas son, sin lugar a duda, los ms sencillos. Las etiquetas se
utilizan para situar fragmentos de texto o imgenes en la pantalla, de manera que su uso ms
comn es dar ttulo a otras reas o a otros componentes Swing.
Tambin es un objeto en java y por tanto tiene asociados sus propias propiedades y
objetos-eventos, al mismo tiempo como se est usando dentro del objeto jFrame, muchas
propiedades que se definan para este objeto, el objeto jLabel las va a heredar.
Para dar valor a una propiedad por cdigo se utiliza la sintaxis:
jLabel.setPROPIEDAD(parmetros)
Algunas de sus propiedades ms importantes son:
Background(), Border(), Bounds(), Cursor(), Enabled(), Font(), Foreground(), Name(),
Opaque(), Text(), ToolTipText(), Visible()
El mtodo setToolTipText hace que cuando pasemos el ratn por encima de la etiqueta
aparezca el texto. Por ejemplo: etiqueta1.setToolTipText( "Esta es etiqueta1" );

Cabe destacar las propiedades:


Text: Modificar el texto que se muestra de la label
Name: Nombre de la variable por si tenemos que acceder por cdigo Java.
Opaque: Es necesario poner la propiedad a true porque si no la etiqueta es transparente
por defecto y no podemos darle color de fondo jLabel.Opaque(true);
Las etiquetas presentan 3 formas de alineamiento:
LEFT o izquierda (JLabel.LEFT).
CENTER o centrada(JLabel.CENTER).
RIGHT o derecho (JLabel.RIGTH).
Un ejemplo de la utilizacin de este componente podra ser el siguiente en el que se muestran
las distintas construcciones del componente JLabel:

setText(String) Establece y obtiene, respectivamente, el texto de la etiqueta.


jLabel.setText(Etiqueta solo con texto);
setIcon(Icon) Establece y obtiene, respectivamente, la imagen de la etiqueta.
Para redimensionar la imagen , en una etiqueta:
ImageIcon a = new ImageIcon("img\\varon.png");
comboBox = new JComboBox();
comboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(comboBox.getSelectedIndex()==1){
Image img = a.getImage();
Image resizedImage = img.getScaledInstance(foto.getWidth(),
foto.getHeight(), 0);
foto.setIcon(new ImageIcon(resizedImage));
}

Botn:JButton
Otro control visual de uso muy comn es el que provee la clase JButton. Este control
visual muestra un botn.
En java es el control principal del jFrame, contiene el cdigo principal del programa y su
activacin por el usuario provoca que se realicen los principales procesos del problema
planteado (aqu es donde se capturan datos, se realizan operaciones, etc.).
De este control se maneja su propiedad TEXT para etiquetarlo con la palabra OK o
ACEPTAR o EXE y su evento Click para activarlo, es en dicho evento donde se construye el
cdigo del programa.
Para insertar una imagen en un botn se hace desde cdigo ya que en diseo genera un
cdigo de error.
Cuando se genera el botn se aade:
ImageIcon Icono= new ImageIcon(nombre.jpg);
jButton.setIcon(Icono);
Mucho mejor usar:
JButton.setIcon(new ImageIcon (formulario.class.getResource(imagen.jpg)));
No se puede poner ruta a la imagen sino no la veriamos desde otro ordenador, se coloca
en la carpeta del proyecto fuera de src, se puede colocar en una carpeta del proyecto y puede
ser:mpg, bmp, png o jpg no ico.
Otros mtodos:
Para cambiar la imagen cuando el ratn este sobre el botn:
jButton.setRolloverIcon(new ImagenIcon(nombre.jpg));
Cambiar de imagen cuando se presione el botn:
jButton.setPressedIcon(new ImagenIcon(nombre.jpg));
Para hacer botones redondos:
Se busca la imagen correspondiente, se aplica el mtodo:
setContentAreaFilled(false) para elimnar toda el rea alrededor del botn
setBorder(null) quitar el borde del botn
poner la imagen como icono
jToopleButton es un botn bi-estado

Campo de texto:JTextField
As como podramos decir que el control JLabel remplaza a la salida estndar
System.out.print, el control JTextField cumple la funcin de la clase Scanner para la entrada de
datos.
En Java este componente es un importante componente visual, su funcin principal es
manejar todos los procesos de entrada y salida (input/output) al programa.
Su principal propiedad es Text(), que es la propiedad que contiene el dato de tipo
STRING que se manipulara en los programas o aplicaciones.
El dato dentro de esta propiedad es de tipo STRING y por tanto se tendr que convertir a
datos numricos normales para poder efectuar procesos numricos
El control JTextField permite al operador del programa ingresar una cadena de
caracteres por teclado.
Como ejemplo vamos a ver cmo se realizara el clculo del doble de un valor numrico
introducido por el usuario. La ventana contiene campoNmero donde el usuario indicar un
nmero, y campoResultado donde se mostrar el doble del valor escrito.

El botn Calcular realizar el proceso de recoger el valor introducido, calcular el doble y


mostrar el resultado, el cdigo ser el siguiente:
private void botnCalcularActionPerformed(java.awt.event.ActionEvent evt)
{
String textoIntroducido, textoDoble;
int numIntroducido, valorDoble;
//Recoger el dato introducido por el usuario
textoIntroducido = campoNmero.getText();
//Convertirlo a tipo numrico
numIntroducido = Integer.valueOf(textoIntroducido);
//Calcular el doble
valorDoble = numIntroducido * 2;
//Convertir el resultado a texto
textoDoble = String.valueOf(valorDoble);
//Mostrar el resultado
campoResultado.setText(textoDoble);
//Todo lo anterior se podra escribir en una solo lnea:
//campoResultado.setText(String.valueOf(Integer.valueOf(campoNmero.getText())*2));
}

Con getText leemos el string introducido en jTextField


Lo convertimos a nmeros con Integer.valueOf, operamos y convertimos el resultado a
string con String.valueOf y guardamos el resultado con setText
Para darle el foco a un campo de texto: jTextFieldNombre.requestFocus();
Para quitar la marca del foco sobre el objeto , en diseo Propiedad :FocusPainted false;
getSelectedText(): retorna el texto seleccionado en su interior;
setEditable(boolean b): habilita o inhabilita la posibilidad de cambiar el texto contenido
Area de texto: JTextArea
El control de tipo JTextArea permite ingresar mltiples lneas, a diferencia del control de
tipo JTextField.
Los componentes de rea de texto (JTextArea), adems del mtodo setText, disponen
del mtodo append, el cual permite aadir texto al que ya tuviera anteriormente el rea de
texto. Hay que recordar que el mtodo setText elimina el texto que tuviera anteriormente el
componente sobre el que se aplica.
jTextAreaSaludo.append("amigos");
Por defecto, el contenido de los campos de texto y de las reas de texto puede ser
modificado por el usuario cuando ejecuta el programa. Si se desea slo se pueda modificar el
contenido desde el cdigo fuente o desde el diseo, se debe cambiar la propiedad "Editable"
del campo de texto o del rea de texto. La propiedad lineWrapp, indica el nmero de
caracteres por lnea.

Inicializar propiedades de los objetos.


Crear un proyecto y luego un JFrame con las siguientes componentes visuales :
Dos controles de tipo JLabel, dos JTextField y dos JButton , para que quede algo como:

Veamos algunas propiedades que podemos modificar


La propiedad text cambia el texto que muestra el objeto JLabel. Probemos de disponer el
texto "Ingrese nombre de usuario:".
De forma similar hagamos los cambios en la propiedad text de los otros
controles visuales de nuestro JFrame:

Podemos ver que se ha generado automticamente el cdigo para inicializar los textos de los
controles JLabel y JButton
import
import
import
import
import
import
import
import

java.awt.BorderLayout;
javax.swing.JPanel;
javax.swing.JFrame;
java.awt.GridBagLayout;
java.awt.Dimension;
javax.swing.JLabel;
java.awt.event.KeyEvent;
java.awt.Color;

import java.awt.Rectangle;
import javax.swing.JTextField;
import javax.swing.JButton;
public class pruebavisual extends JFrame {
private
private
private
private
private
private
private
private
private

static final long serialVersionUID = 1L;


JPanel jContentPane = null;
JPanel jPanel = null;
JLabel jLabel = null;
JLabel jLabel1clave = null;
JTextField jTextFieldusuario = null;
JTextField jTextFieldclave = null;
JButton jButtonaceptar = null;
JButton jButtoncancelar = null;

public pruebavisual() {
super(); --- Llama a la clase padre
initialize(); }---Llama al constructor
----------------------------private JButton getJButtoncancelar() {
if (jButtoncancelar == null) {
jButtoncancelar = new JButton();
jButtoncancelar.setBounds(new Rectangle(231, 171, 141, 36));
jButtoncancelar.setText("Cancelar");
}
return jButtoncancelar;}
/*Aqu se aadira main */ }
Y de esta forma con todos los objetos
Podemos sacar un mensaje usando : (No olvidar que hay que importar la clase :
import javax.swing.JOptionPane;
JOptionPane.showMessageDialog( null, "Hola mundo ", JOptionPane.PLAIN_MESSAGE );
Tambin podemos visualizar el contenido de variables:
JOptionPane.showMessageDialog( null, "La suma es " + suma, "Suma de dos enteros",
JOptionPane.PLAIN_MESSAGE );
El primer argumento ayuda a la aplicacin de Java a determinar en dnde debe colocar el
cuadro de dilogo. El valor null indica que el dilogo debe aparecer en el centro de la
pantalla de la computadora.
El segundo argumento es el mensaje a mostrar; en este caso, el resultado de concatenar el
objeto String "La suma es " y el valor de suma.
El tercer argumento ("Suma de dos enteros") representa la cadena que debe aparecer en la
barra de ttulo del dilogo, en la parte superior.
El cuarto argumento (JOption-Pane.PLAIN_MESSAGE) es el tipo de dilogo de mensaje a
mostrar. Un dilogo PLAIN_MESSAGE no muestra un icono a la izquierda del mensaje. La
clase JOptionPane proporciona varias versiones sobrecargadas de los mtodos

showInputDialog y showMessageDialog, as como mtodos que muestran otros tipos de


dilogos.
Para obtener informacin completa acerca de la clase JOptionPane, visite el sitio
java.sun.com/javase/6/docs/api/javax/swing/JOptionPane.html.
Constantes de dilogos de mensajes de JOptionPane
Las constantes que representan los tipos de dilogos de mensajes se muestran en el
cuadro. Todos los tipos de dilogos de mensaje, excepto PLAIN_MESSAGE, muestran un icono
a la izquierda del mensaje. Estos iconos proporcionan una indicacin visual de la importancia
del mensaje para el usuario. Observe que un icono QUESTION_MESSAGE es el icono
predeterminado para un cuadro de dilogo de entrada

Existen varios tipos de jOptionPane, otro muy usado es jOptionPane.showConformDialog


JOptionPane.showConfirmDialog(null, "Conforme");

Donde null es la posicin centrada y El texto que queremos que aparezca, es este caso aparece
un cuadro de dialogo con el siguiente formato:

Esto nos devuelve un nmero entero que indica el botn pulsado:


0 para el si, 1 para el no y 2 para cancelar, lo que nos permitir usar por ejemplo un switch()case para controlar los distintos mtodos.
Ver el ejercicio JoptionPaneSuma
Qu es un evento?
Todos los sistemas operativos estn constantemente atendiendo a los eventos
generados por los usuarios. Estos eventos pueden ser pulsar una tecla, mover el ratn, hacer
clic con el ratn, pulsar el ratn sobre un botn o men (Java distingue entre simplemente
pulsar el ratn en un sitio cualquiera o hacerlo, por ejemplo, en un botn).

El sistema operativo notifica a las aplicaciones que estn ocurriendo estos eventos, y
ellas deciden si han de responder o no de algn modo a este evento.
Evento en Java
Cada vez que un usuario ejecuta una accin sobre un programa desarrollado en Java se
produce un evento que el sistema operativo recoge y transmite al sistema Java.
Cuando la JVM recibe un evento genera una clase de ese tipo y es transmitido a un
mtodo para que lo procese.
Es decir se crea un objeto al producirse un evento (Source) pero lo gestiona
otro objeto (listener). Este tipo de arquitectura se llama modelo basado en la
delegacin.
El modelo de delegacin de eventos
El modelo de Java se basa en la delegacin de eventos: el evento se produce en un
determinado componente, por ejemplo un botn. Dnde se produce el evento se denomina
fuente del evento. A continuacin el evento se transmite a unmanejador de eventos (event
listener) que este asignado al componente en el que se produjo el evento. El objeto que
escucha los eventos es el que se encargar de responder a ellos adecuadamente.

Evento en Swing
Un evento de Swing es una accin iniciada por el usuario al utilizar un
elemento de un interface de usuario.
Cada vez que se produce un evento automticamente se crea un objeto de ese tipo de
evento.
Todos los eventos vienen de la clase java.awt.event

Manejo de Eventos
Cuando un usuario interacta con un interface de usuario pulsando un botn,
seleccionando un valor de un botn se genera un evento que tiene los siguientes elementos:
1. Fuente del evento o event source .Es el componente swing que origina el evento.
2. El escuchador o event listener. Es el encargado de atrapar o detectar que se ha producido
un evento.
3. El manejador del evento o event handler Es un mtodo que recibe un objeto del tipo de
evento que se ha producido, lo descifra, ejecuta el cdigo asociado y devuelve el control al
usuario.
Es decir que tendremos que para manejar los eventos que se producen en una aplicacin
tenemos que controlar estos 3 aspectos.
Tipos de Eventos
El modelo de eventos que permite java es:

ActionEvent
Este evento se produce cuando se efecta cualquier accin sobre un
componente, ya sea un click , doble click...
AdjustmentEvent
Este evento se produce cuando se ajusta un valor de un componente.
ComponentEvent
Este evento se produce cuando el usuario mueve redimensiona un componente.
ItemEvent
Este evento se produce cuando se modifica el estado de un elemento del
componente.

TextEvent
Este evento se produce cuando el contenido textual de un componente cambia.
FocusEvent
Este evento se produce cuando se cambia el foco de un componente.
InputEvent
Este evento se produce cuando se realizan operaciones especiales con el teclado o ratn
(ctrl + alt )
ContainerEvent
Este evento se produce cuando se aaden o se eliminan componentes en un
contenedor.
WindowEvent
Este evento se produce cuando se realiza una accin sobre una ventana como abrirla,
cerrarla, minimizarla
KeyEvent (Importante)
Este evento se produce cuando el usuario presiona una tecla. (Lo usaremos para
controlar la tecla pulsada)
Por ejemplo si queremos controlar que solo introduzcamos valores numricos:
KeyEvent->eventos->key->KeyTiped y generamos el cdigo:
Nombreobjeto.addKeyListener(new KeyAdapter(){
@override
public void keyTyped(keyEvent e){
char caracter=e.getKeyChar(); // declaramos un character que recoge la tecla pulsada
if(caracter<0 || carcter >9)
e.consume() // llamamos al mtodo consume(), que no va a hacer eco de la tecla
pulsada hasta que no sea un numero
}
});
MouseEvent
Este evento se produce cuando el usuario realiza una accin con el ratn ya sea click,
pasar por encima de un componente

Listener u Oyentes de Eventos


Un oyente de eventos es una clase de tipo interface Java que contiene una serie de
declaraciones de mtodos preparados para capturar las diferentes situaciones que producen un
evento.
Si una clase implementa este interface se definirn los mtodos y si se produce el
evento se ejecutar el cdigo asociado con la accin producida.
Para cada evento del tipo xxxEvent, existe una interface xxxListener con todos sus
mtodos, los ms importantes son:

Se utiliza cuando queremos que un mtodo se ejecute nada ms abrir la ventana por ej.
Cargar un JComboBox o un JTable. Se hace aadiendo el evento: window->windowOpened al
Frame

Por Ej.
public class MiClase implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
// Aqui el cdigo que queremos que se ejecute cuando tiene lugar la accin.
// la pulsacin del botn, el <INTRO> en el JTextField, eleccin en el JComboBox, etc.
}
}
Distinguir qu botn causa la accin
Cuando nos decidimos a hacer una clase, suele ser habitual querer aprovechar
la clase para varios botones. En el mtodo actionPerformed() de esa clase se nos pasa un
ActionEvent. Con este ActionEvent podemos obtener informacin sobre quin es el que ha
provocado el evento.
Object fuente = event.getSource();
Este mtodo nos devuelve el componente java (JButton, JTextField, etc) que ha provocado
el evento. Si la clase est aadida, por ejemplo a boton1, boton2 y boton3, en el mtodo
actionPerformed() podemos hacer algo como esto
public void actionPerformed (ActionEvent e)
{
Object fuente = e.getSource();
if (fuente==boton1)
metodoParaBoton1();
else if (fuente==boton2)
metodoParaBoton2();
else if (fuente==boton3)
metodoParaBoton3();
}
Para aadir un evento a un objeto, y fijaos el cdigo que se genera automticamente:

jcerrar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.exit(0);
}
});
En el parmetro del mtodo addActionListener del botn que cierra se le pasa la
referencia a una interface que se crea de tipo ActionListener e implementa el mtodo
actionPerformed donde agregaremos el cdigo necesario para responder el evento en este caso
cerrar la aplicacin.
Veamos un ejemplo
Para asociar eventos existe una mecnica para automatizar la generacin de las
interfaces que capturan los eventos de los objetos JButton, JMenuItem, JList etc.
Crearemos una interfaz visual similar a esta (tres controles de tipo JLabel, dos JTextField y dos
JButton):

Ahora seleccionamos el control JButton y con le hacemos click con el botn derecho y aparece
el men contextual y vemos el evento que vamos a aplicar

En este caso actionPerformed. Hacemos clic sobre el evento y vemos que se abre el editor de
texto y aparece el siguiente cdigo generado automticamente:
jButtonsumar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()");
} });
En el parmetro del mtodo addActionListener del botn que suma se le pasa la
referencia a una interface que se crea de tipo ActionListener e implementa el mtodo
actionPerformed donde agregaremos el cdigo necesario para responder el evento,
en este caso aparece por defecto una salida por consola.
Para este problema debemos rescatar los valores almacenados en los controles de tipo
JTextField, convertirlos a entero, sumarlos y enviar dicho resultado a una JLabel.
jButtonsumar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
int v1=Integer.parseInt(jTextFieldprimervalor.getText());
int v2=Integer.parseInt(jTtextFieldsegundovalor.getText());
int suma=v1+v2;
jLabel1resultado.setText(String.valueOf(suma));
}
});
Hacemos lo mismo para el botn Salir:
jButtonsalir.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.exit(0);
} });
Ejecutamos el programa y listo:

Ejercicios propuestos
1.- Confeccionar un programa que permita ingresar un mail en un control de tipo JTextField y
el cuerpo del mail en un control de tipo JTextArea. Aadirle dos botones uno limpiar que
limpiar el area de texto y otro para salir

2.-Realiza la siguiente interfaz, de forma que al pulsar un botn aparezca una etiqueta con su
color y escrito el texto en ese color:

El botn limpiar limpiara la etiqueta de todo texto


3.-Introducir un nmero y que me diga que si es par o impar, mediante una etiqueta
Que permanecer invisible hasta que aceptemos el nmero. El botn salir nos dar un mensaje
de finalizacin usar jOptionPane

4.-Ingresar el nombre de usuario y clave en controles de tipo JTextField. Si se ingresa


las cadena (usuario: juan, clave=abc123) mostrar un mensaje que diga correcto en caso
contrario mostrar el mensaje "Incorrecto". Si te atreves haz que el programa solo te
permita pedir la clave tres veces y si no lo aciertas te sales de la aplicacin
5.- Escribir un programa que represente una ventana que contenga dos cajas de texto y
dos botones, uno etiquetado con MAYSCULAS y otro con minsculas. Cuando se
pulse el botn de maysculas se deber convertir el contenido de la primera caja de
texto a maysculas y si se pulsa el otro a minsculas y presentarlo en la segunda caja
de texto. Si no hay texto se debe presentar un mensaje de error.
6.-Mquina de bolas consistir algo parecido a esta interfaz, que vosotros podis
mejorar: sustituir los botones por botones con iconos uno con luz y otro sin luz,
Que activaran o desactivaran el resto de los componentes, al pulsar el botn rojo
Se incrementara el contador rojo y as con todos, al pulsar sin Luz, desactivara todos los
botones
Contadores de bolas
Rojas, Verdes ,Azul

7.- Introduce 5 nmeros y busca el Mayor y el menor, controla que solo


introduzcas 5 nmeros y despus aparecern los resultados, la interfaz te la dejo a ti
8.- Ejercicio Calculadora Swing (El componente Pesetas se aadir en el tema
siguiente)
Escribir un programa en Java que permita realizar las operaciones tpicas de una calculadora:
suma, resta, multiplicacin y divisin. El usuario introducir el operando 1 el 2 y luego
seleccionar la operacin a realizar, mostrando el resultado correspondiente. Tambin debe
tener la posibilidad de convertir de pesetas a euros y viceversa. El programa deber tratar
todos los posibles errores en tiempo de ejecucin, dando un mensaje con un dilogo de error.
El aspecto grfico del programa puede ser como el siguiente:

You might also like