You are on page 1of 254

GUI JAVA

Mg. Nehil Muoz C.


2013 - I
Interfaces Grficas
Una interfaz es un medio que permite que dos entidades
se comuniquen.
En una interfaz de usuario una de las entidades es una
persona y la otra un sistema que el usuario intenta
controlar.
El sistema puede ser una herramienta, un automvil o
cualquier dispositivo electrnico, en particular una
computadora.
En una computadora el usuario ejecuta acciones como
oprimir teclas o el botn del mouse y estas acciones son
percibidas por la interfaz del sistema.

Interfaces Grficas
Antes de los 90 se utilizaban interfaces de lneas de
comandos.
El usuario ingresaba comandos con una sintaxis muy
rigurosa usando el teclado.

Interfaces Grficas
Las interfaces grficas de usuario (GUI) explotan la
capacidad de las computadoras para reproducir
imgenes y grficos en pantalla y brindan un ambiente
ms amigable, simple e intuitivo.
interfaz: medio de comunicacin entre entidades.
grfica: incluye ventanas, menes, botones, texto,
imgenes.
usuario: persona que usa la interfaz para controlar un
sistema

interfaz (superficie de contacto)
Conexin fsica y funcional entre dos aparatos o sistemas independientes.
Interfaces Grficas
Modelo Escritorio
conos
Ventanas
Menes descolgables
Texto e imgenes organizadas en redes
Manipulacin arrastrar y soltar
Interfaces Grficas
conos
Interfaces Grficas
Una ventana es una porcin de la pantalla que sirve
como una pantalla ms pequea
Interfaces Grficas
Ventanas Solapadas
Interfaces Grficas
Men Desplegable
Interfaces Grficas
Un men es una lista de opciones alternativas
ofrecidas al usuario
Interfaces Grficas
Los 90
Interfaces Grficas
Escritorio 2D
Interfaces Grficas
Escritorio 3D
Interfaces Grficas
Interfaces Grficas
Una GUI es una coleccin de componentes con una
representacin grfica y capacidad para percibir
eventos generados por las acciones del usuario.
Las componentes son las partes individuales a partir de
las cuales se conforma una interfaz grfica. Por
ejemplo, el botn para cerrar una ventana, la barra
de desplazamiento de una ventana y la ventana
misma.



Interfaces Grficas
Un usuario realiza una accin que genera un evento
ante el cual una componente tiene una reaccin.
Una componente est asociada a un objeto grfico
que puede interactuar con el usuario. Un objeto grfico
es una instancia de una clase grfica.
Algunos de los atributos de un objeto grfico son
atributos grficos y parte del comportamiento ofrece
servicios grficos.




Interfaces Grficas
Algunos componentes son contenedores de otros
componentes.
Un contenedor tiene atributos especiales como por
ejemplo el layout o diagramado de acuerdo al cual se
organizan las componentes contenidas.
Una ventana es un contenedor de alto nivel.
Un frame es un tipo especial de ventana sobre el que
puede ejecutarse una aplicacin.

Interfaces Grficas
La construccin de una GUI requiere:
disear la interfaz de acuerdo a las especificaciones
implementar la interfaz usando las facilidades
provistas por el lenguaje.

Interfaces Grficas
Diseo de una GUI

El diseo de una interfaz grfica abarca tres
aspectos:
Definir las componentes
Organizar las componentes estableciendo el
layout o diagramado de las componentes
contenedoras
Decidir cmo reacciona cada componente ante
las acciones realizadas por el usuario.

Interfaces Grficas
Implementacin de una GUI

La implementacin de una interfaz grfica
consiste en:
crear un objeto grfico para cada componente
de la GUI e insertarlo en otras componentes
contenedoras.
definir el comportamiento de las componentes
reactivas en respuesta a las acciones del usuario.

El diseo es una etapa fundamental, pero nuestro
objetivo en esta materia no va a ser disear
interfaces grficas sino implementar el diseo de
una GUI
Interfaces Grficas en Java
El mecanismo de manejo de eventos provisto por
Java permite combinar las clases que modelan los
aspectos especficos de un problema con las que
soportan la implementacin de la interfaz grfica.
La implementacin de una GUI en Java se realiza
usando un paquete grfico.
Un paquete grfico brinda clases generales a
partir de las cuales es posible crear objetos
grficos o bien definir nuevas clases ms
especficas a partir de las cuales crear objetos.

Implementacin de una GUI

Interfaces Grficas en Java
El desarrollo de software orientado a objetos
enfatiza la importancia de separar los aspectos
especficos del problema de aquellos que se
relacionan con la presentacin de los datos.
Si vamos a desarrollar un sistema para depositar y
extraer efectivo en un cajero automtico, separaremos
la clase que modela la cuenta bancaria de las que se
ocupan de la interfaz grfica.
Observemos que en lo que sigue integraremos la
mayora de los conceptos presentados en esta
materia: herencia, polimorfismo, ligadura dinmica
y encapsulamiento.
Interfaces Grficas en Java
Caso de Estudio: Cuenta Bancaria

Se desea modelar una cuenta bancaria sobre la
que se realizan depsitos, extracciones y
consultas de saldo.
La cuenta bancaria tiene asociado un cdigo y un
saldo. El cdigo la identifica unvocamente y es
fijo. El saldo aumenta cuando el titular de la
cuenta efecta un depsito y disminuye cuando
realiza una extraccin.
El usuario est autorizado a girar en descubierto
hasta un monto mximo establecido.
Interfaces Grficas en Java
Caso de Estudio: Cuenta Bancaria

El usuario opera con su cuenta bancaria a travs de una
aplicacin que se ejecuta sobre un frame como el que
sigue:
Interfaces Grficas en Java
Caso de Estudio: Cuenta Bancaria

Si el usuario presiona el botn Depositar en pantalla
aparece un cuadro de dilogo como el que sigue:
Si el usuario presiona el botn OK aparece en pantalla un
cuadro de dilogo
Interfaces Grficas en Java
Caso de Estudio: Cuenta Bancaria

Anlogamente si el usuario presiona el botn Extraer en
pantalla aparece un cuadro de dilogo como el que
sigue:
Si el usuario presiona el botn OK aparece en pantalla un
cuadro de dilogo
Interfaces Grficas en Java
Caso de Estudio: Cuenta Bancaria

Si el usuario presiona el botn Consultar Saldos en
pantalla aparece
O bien
Cuenta_Bancaria
<<atributos de la clase>>
max_descubierto: real
<<atributos de la instancia>>
codigo : entero
saldo : real
<<constructor>>
Cuenta_Bancaria ()

<<comandos>>
depositar (mto : real)
extraer (mto : real) : boolean

<<consultas>>
obtenerCod () : entero
obtenerSaldo () : real
descubierto () : boolean
GUI_CtaBancaria
cuenta : CuentaBancaria
panelAcciones, panelSaldo : JPanel
consultarSaldo,
botonExtraer, botonDepositar :JButton
<<constructor>>
GUI_CtaBancaria ()

La ejecucin comienza con la
creacin de una instancia de
GUI_CtaBancaria
Caso de Estudio: Cuenta Bancaria

Interfaces Grficas en Java
Interfaces Grficas en Java
Caso de Estudio: Cuenta Bancaria

Para implementar esta interfaz grfica vamos a definir una
clase que extienda a la clase JFrame provista por el
paquete grfico Swing.
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import javax.swing.*;
public class GUI_CtaBancaria extends JFrame {

public GUI_CtaBancaria() {

}
}
Interfaces Grficas en Java
Caso de Estudio: Cuenta Bancaria

Cada botn de la interfaz estn asociado a un objeto
grfico que tienen la facultad de reaccionar ante
acciones producidas por el usuario.


public class GUI_CtaBancaria
extends JFrame {


private JButton botonDepositar,
botonExtraer,
consultarSaldo ;


}
Interfaces Grficas en Java
Caso de Estudio: Cuenta Bancaria

Se crea un objeto grfico asociado a la componente de la
GUI.

botonDepositar = new JButton();

Interfaces Grficas en Java
Caso de Estudio: Cuenta Bancaria

Se establece la apariencia de la componente de la GUI,
envindole mensajes al objeto grfico asociado.

botonDepositar = new JButton();
botonDepositar.setText("Depositar");
botonDepositar.setPreferredSize
(new Dimension(124, 50));
botonDepositar.setSize(150, 50);
botonDepositar.setBorder
(BorderFactory.createCompoundBorder
(new LineBorder
(new java.awt.Color(0, 0, 0), 1, false),
null));

Interfaces Grficas en Java
Caso de Estudio: Cuenta Bancaria

Para que el botn tenga la capacidad de percibir la accin
del usuario, creamos un objeto oyente y lo registramos al
objeto grfico.

botonDepositar = new JButton();
botonDepositar.setText("Depositar");
botonDepositar.setPreferredSize
(new Dimension(124, 50));
botonDepositar.setSize(150, 50);
botonDepositar.setBorder
(BorderFactory.createCompoundBorder
(new LineBorder
(new java.awt.Color(0, 0, 0), 1, false),
null));
OyenteDep oDep = new OyenteDep();
botonDep.addActionListener(oDep);

Interfaces Grficas en Java
Caso de Estudio: Cuenta Bancaria

Otra parte de la implementacin consiste en escribir el
cdigo que especifica el comportamiento de cada objeto
reactivo.

private class OyenteDep implements ActionListener {
public void actionPerformed(ActionEvent event){
float dep;
String deposito;
JOptionPane dialogo = new JOptionPane();
deposito = dialogo.showInputDialog( "Ingrese la cantidad a
depositar" );
if ((deposito != null) && (deposito.length() > 0)){
dep = Float.parseFloat(deposito);
dialogo.showMessageDialog(null,"Usted deposit " + dep+
" pesos","Depsito", JOptionPane.PLAIN_MESSAGE
); cuenta.depositar(dep);
}
}
Interfaces Grficas en Java
Caso de Estudio: Cuenta Bancaria

En la implementacin de esta interfaz grfica
redefinimos en una clase interna el cdigo del
mtodo actionPerformed() provisto por
ActionListener.
La clase que modela la interfaz usa los servicios
provistos por la clase que modela la cuenta
bancaria propiamente dicha.

Cuenta_Bancaria GUI_CtaBancaria
Interfaces Grficas en Java
Caso de Estudio: Cuenta Bancaria

import
class TestCtaBancaria
public static void main {
(String[] args) {
GUI_CtaBancaria unaCuenta ;
unaCuenta = new GUI_CtaBancaria();
unaCuenta.setVisible(true);
}
}
La aplicacin crea una instancia de la nueva clase.
La ejecucin comienza creando una instancia de la clase
GUI_CtaBancaria, esto es, creando un frame.



Interfaces Grficas en Java
Un frame es un tipo particular de ventana sobre
la que es posible ejecutar una aplicacin
Podemos construir un frame creando un objeto de
la clase JFrame o de una clase ms especfica que
definimos a partir de JFrame


Interfaces Grficas en Java
Un frame es un objeto contenedor
Toda instancia de JFrame tiene atributos marco,
lnea de ttulo, algunos botones y un panel de
contenido



import javax.swing.*;
class PrimerEjemplo {

public static void main(String args[ ]) {

JFrame f = new JFrame(Mi Aplicacin);
f.setSize(400, 300);
f.setVisible(true);
}
}


Interfaces Grficas en Java



Creamos directamente una instancia de JFrame


import javax.swing.*;
class PrimerEjemplo {

public static void main(String args[ ]) {

JFrame f = new JFrame();
f.setTitle (Mi Aplicacin);
f.setSize(400, 300);
f.setVisible(true);
}
}


Interfaces Grficas en Java



En este caso usamos el constructor sin
parmetros y establecemos el ttulo luego


La variable f mantiene una referencia a un objeto
de clase JFrame y puede recibir cualquiera de los
mensajes provistos por esa clase (o sus clases
ancestro)

Interfaces Grficas en Java
JFrame f = new JFrame(Mi Aplicacin);
f.setSize(400, 300);
f.setVisible(true);


setSize(400,300)
(Dimension) establece el ancho y la altura de la
ventana.

setVisible(true)
(Component) el parmetro indica si la ventana se muestra o
no.

Interfaces Grficas en Java


class MiVentana extends JFrame{
public MiVentana() {
super(Segundo Ejemplo");
setSize(400, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}

Interfaces Grficas en Java
import javax.swing.*;
public class SegundoEjemplo {
public static void main(String args[ ]) {
MiVentana f= new MiVentana();
f.setVisible(true);
}
}


Una alternativa ms adecuada es definir una nueva clase
que extiende a JFrame


La variable f mantiene una referencia a un objeto de
clase MiVentana
El objeto est caracterizado por los atributos y
servicios de MiVentana, JFrame y de sus
ancestros en la jerarqua
Como los mensajes setSize y
setDefaultCloseOperation son enviados desde
el constructor de una ventana no es necesario indicar
el objeto receptor.
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
(JFrame) el parmetro indica qu hacer cuando la
ventana se cierra, en este caso terminar la
aplicacin.

Interfaces Grficas en Java


Un objeto de clase JFrame tiene varios atributos,
entre ellos el panel de contenido.
En lugar de acceder directamente al frame, vamos
a trabajar sobre el panel de contenido.
Por ejemplo cuando establecemos el color del
fondo o insertamos componentes

getContentPane().setBackground(col);

getContentPane().add(etiqueta);
Interfaces Grficas en Java


import java.awt.*;
import javax.swing.*;
class MiVentanaColor extends JFrame{
JLabel etiqueta;
public MiVentanaColor (String titulo,
Color col) {
super(titulo);
setSize(400, 300);

getContentPane().setBackground(col);

etiqueta = new JLabel("Panel de contenido");
getContentPane().add(etiqueta);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}

Interfaces Grficas en Java
Panel de
contenido


Interfaces Grficas en Java
import java.awt.*;
class TercerEjemplo {
public static
void main(String args[ ]) {
MiVentanaColor f1= new
MiVentanaColor(Una ventana,
Color.BLUE);
f1.setVisible(true);

MiVentanaColor f2= new
MiVentanaColor(Otra ventana,
Color.RED);
f2.setVisible(true);
}
}





import java.awt.*;
import javax.swing.*;
class MiVentanaColor extends JFrame{
JLabel etiqueta;
public MiVentanaColor (String titulo,
Color col) {
super(titulo);
setSize(400,300);

getContentPane().setBackground(col);

etiqueta = new JLabel("Panel de contenido");
getContentPane().add(etiqueta);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}

Interfaces Grficas en Java
Mensajes enviados al objeto de clase
MiVentanaColor que se est construyendo



Container panel = getContentPane();
panel.setBackground(col);
panel.add(etiqueta);


Interfaces Grficas en Java
getContentPane().setBackground(col);
getContentPane().add(etiqueta);
getContentPane()
mensaje enviado al objeto de clase
MiVentanaColor para requerir el panel de
contenido, retorna un objeto de clase Container

mensajes enviados al panel de contenido ( de clase
Container) para establecer valores de atributos o
agregar componentes



import java.awt.*;
import javax.swing.*;
public class MiVentanaColor extends JFrame{
JLabel etiqueta;
Container panel;
public MiVentanaColor(String titulo,
Color col) {
super(titulo);
setSize(400, 300);
etiqueta =new JLabel(Panel de contenido");
panel = getContentPane();
panel.setBackground(col);
panel.add(etiqueta);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}


Interfaces Grficas en Java


Interfaces Grficas en Java
Cada componente de la interfaz, en este caso la
etiqueta y el panel de contenido, queda asociada a
un objeto con una representacin grfica.
Los atributos de la clase mantienen justamente
referencias a estos objetos.
En este caso son objetos pasivos, no reaccionan ante
las acciones del usuario.
Las componentes activas en los ejemplos de la clase
de hoy reaccionan con un comportamiento
establecido por las clases provistas por Swing y AWT.
Por ejemplo la barra de ttulo cuando arrastramos el
mouse o los botones para minimizar, maximizar y
cerrar.



import java.awt.*;
import javax.swing.*;
public class MiVentanaColor extends JFrame{
JLabel etiqueta;
Container panel;
public MiVentanaColor(String titulo,
Color col) {
super(titulo);
initGUI (titulo,col);
}

}


Interfaces Grficas en Java
Adoptamos la convencin de que el constructor
invoca al constructor de la clase base y luego invoca
a un mtodo provisto por la misma clase que realiza
el resto de la inicializacin.



void initGUI (String titulo, Color col){
etiqueta = new JLabel(Panel de contenido");
panel = getContentPane();
panel.setBackground(col);
panel.add(etiqueta);
setSize(400, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}



Interfaces Grficas en Java
ste es el aspecto cuando se aprieta rojo o verde:
Caso de Estudio: Fondo Rojo - Verde
Desarrolle una aplicacin que permita establecer el color de
fondo de una ventana. El color ser rojo o verde de acuerdo
al botn que se apriete.
La ventana inicialmente debe aparecer as:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUIFondoRojoVerde extends JFrame{

private JButton botonRojo, botonVerde;




}

Caso de Estudio: Fondo Rojo - Verde
botonRojo y botonVerde mantendrn referencias a
objetos grficos
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUIFondoRojoVerde extends JFrame{

private JButton botonRojo, botonVerde;




}

Caso de Estudio: Fondo Rojo - Verde
Ambos objetos son adems objetos fuentes de evento, estn
asociados a componentes reactivas de la GUI
Caso de Estudio: Fondo Rojo - Verde
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUIFondoRojoVerde extends JFrame{

private JButton botonRojo, botonVerde;
public GUIFondoRojoVerde() {

hacerGUI();

}

}



private void hacerGUI (){
botonRojo = new JButton("Rojo");



}
Caso de Estudio: Fondo Rojo - Verde
Se crea un objeto fuente de evento de clase
JButton
El objeto fuente de evento debe quedar vinculado a
un objeto oyente que acte de acuerdo al
comportamiento esperado para el botn rojo.


private void hacerGUI (){
botonRojo = new JButton("Rojo");
OyenteBotonR ponerRojo = new OyenteBotonR();


}
Caso de Estudio: Fondo Rojo - Verde
Se crea un objeto oyente de clase OyenteBotonR
En la clase OyenteBotonR definimos el
comportamiento esperado para el botn Rojo


private void hacerGUI (){
botonRojo = new JButton("Rojo");
OyenteBotonR ponerRojo = new OyenteBotonR();
botonRojo.addActionListener(ponerRojo);

}
Caso de Estudio: Fondo Rojo - Verde
Se vinculan los dos objetos, esto es, se registra el
objeto oyente al objeto fuente de evento.

La componente de la GUI asociada al objeto fuente
de evento, el botn rojo en este caso, pasa a ser
reactivo: percibe la accin del usuario y reacciona
de acuerdo al comportamiento especificado en la
clase OyenteBotonR


private void hacerGUI (){
botonRojo = new JButton("Rojo");
OyenteBotonR ponerRojo = new OyenteBotonR();
botonRojo.addActionListener(ponerRojo);

getContentPane().add(botonRojo);







}
Caso de Estudio: Fondo Rojo - Verde
Se agrega el botn en el contenedor
Cuando se oprima el botn Rojo la
reaccin depende del comportamiento
que establece la clase OyenteBotonR


private void hacerGUI (){
botonRojo = new JButton("Rojo");
OyenteBotonR ponerRojo = new OyenteBotonR();
botonRojo.addActionListener(ponerRojo);

getContentPane().add(botonRojo);

botonVerde = new JButton("Verde");
OyenteBotonV ponerVerde = new OyenteBotonV();
botonVerde.addActionListener(ponerVerde);

getContentPane().add(botonVerde);

}
Caso de Estudio: Fondo Rojo - Verde
Caso de Estudio: Fondo Rojo - Verde
Ambos botones son objetos fuente de evento y cada uno
est ligado a un objeto oyente.


private void hacerGUI (){
botonRojo = new JButton("Rojo");
OyenteBotonR ponerRojo = new OyenteBotonR();
botonRojo.addActionListener(ponerRojo);

getContentPane().add(botonRojo);

botonVerde = new JButton("Verde");
OyenteBotonV ponerVerde = new OyenteBotonV();
botonVerde.addActionListener(ponerVerde);

getContentPane().add(botonVerde);

}
class OyenteBotonR implements ActionListener {
public void actionPerformed( ActionEvent event) {
getContentPane().setBackground(Color.red);}
}
}




}
Caso de Estudio: Fondo Rojo - Verde


private void hacerGUI (){
botonRojo = new JButton("Rojo");
OyenteBotonR ponerRojo = new OyenteBotonR();
botonRojo.addActionListener(ponerRojo);

}
Caso de Estudio: Fondo Rojo - Verde
El evento externo provocado por la accin del
usuario al oprimir el botn Rojo, es detectado por el
objeto fuente de evento.

El objeto fuente de evento detecta el evento
externo y dispara un evento interno, esto es, se
crea un objeto implcitamente de la clase
ActionEvent.

La definicin de la clase OyenteBotonR incluye la
redefinicin del mtodo actionPerformed que
recibe como argumento el objeto evento creado
implcitamente.



class OyenteBotonV implements ActionListener {
public void actionPerformed( ActionEvent event) {
getContentPane().setBackground(Color.green);}
}
}
}
Caso de Estudio: Fondo Rojo - Verde


private void hacerGUI (){

botonVerde = new JButton(Verde");
OyenteBotonV ponerVerde = new OyenteBotonV();
botonVerde.addActionListener(ponerVerde);

}
public class GUIFondoRojoVerde extends JFrame{

class OyenteBotonR implements ActionListener {

public void actionPerformed( ActionEvent event) {
getContentPane().setBackground(Color.red); }
}

class OyenteBotonV implements ActionListener {

public void actionPerformed( ActionEvent event) {
getContentPane().setBackground(Color.green);}
}
}
Caso de Estudio: Fondo Rojo - Verde
Cada oyente tiene su propio mtodo actionPerformed
que establece el comportamiento de la componente
reactiva de la interfaz.
Cada clase interna tiene acceso al panel de contenido.
Caso de Estudio: Fondo Rojo - Verde
El programador redefine el mtodo
actionPerformed que no va a ser invocado
explcitamente por l mismo, sino que el mensaje
que provoca su ejecucin est incluido en algn
mtodo definido en una clase provista por Java.
Esto es, el programador define (o redefine) un
mtodo que l mismo NUNCA VA A INVOCAR al
menos explcitamente!
El mtodo recibe como argumento un objeto que
tampoco ha sido creado explcitamente por el
programador.
Caso de Estudio: Fondo Rojo - Verde
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUIFondoRojoVerde extends JFrame
{
private JButton botonRojo, botonVerde;
public GUIFondoRojoVerde() {
setLayout(new FlowLayout());
setSize(200, 120);
setDefaultCloseOperation
(EXIT_ON_CLOSE);
hacerGUI();
}
}

class Test{
public static void main(String[] args) {

GUIFondoRojoVerde cuadro =
new GUIFondoRojoVerde();
cuadro.setVisible(true);
}
}
Caso de Estudio: Fondo Rojo - Verde
Caso de Estudio: Fondo Rojo - Verde
Observemos que estamos considerando tres tipos
de objetos:

Los objeto fuente del evento
Los objetos evento
Los objetos oyentes (listeners)
Caso de Estudio: Fondo Rojo - Verde
Los objetos fuente del evento, estn asociados a una
componente de la interfaz, tienen una representacin
grfica y son capaces de percibir y reaccionar ante un
evento externo provocado por una accin del usuario y
disparar eventos de software.
Los objetos evento que son disparados
implcitamente por un objeto fuente del evento.
Los objetos oyentes (listeners) que se ejecutan para
manejar un evento. La clase a la que pertenece un
objeto oyente brinda mtodos para manejar eventos, es
decir especifica el curso de accin a seguir en respuesta
a diferentes tipos de eventos.
Caso de Estudio: Fondo Rojo - Verde
En la programacin basada en eventos el programador:
crea objetos grficos, algunos de ellos son objetos fuente
de evento, reaccionan ante un evento externo creando
objetos evento
crea objetos oyentes cuya funcin va a ser manejar los
eventos que se producen
implementa los mtodos manejadores de eventos que
determinan el comportamiento de los objetos oyentes
Los objetos que corresponden al evento interno no son
creados explcitamente por el programador, no estn
asociados a una variable.
El flujo de ejecucin queda establecido fundamentalmente
por el orden de los eventos.

Componente
reactiva
Evento
El objeto fuente de evento
dispara uno o ms
eventos internos
El objeto oyente recibe un
mensaje con el objeto evento
como parmetro y en respuesta
a l ejecuta un mtodo definido
por la clase a la que pertenece.
El usuario realiza una accin
que genera un evento
externo sobre un objeto
fuente de evento

Caso de Estudio: Fondo Rojo - Verde
Cada evento interno est
asociado a un objeto evento
creado implcitamente
Caso de Estudio: Fondo Rojo - Verde
La clase a la que pertenece el objeto oyente implementa
el mtodo actionPerformed(ActionEvent e)
El mtodo recibe el evento interno como parmetro.
El mtodo actionPerformed forma parte de la inteface
ActionListener que es implementada por las clases
OyenteBotonR y OyenteBotonV

Los objetos de las clases JButton, JTextField,
JComboBox, JRadioButton, JCheckBox, JMenuItem
reaccionan frente a un evento externo generando un objeto
evento de la clase ActionEvent.

Cada clase puede generar objetos evento de una clase
diferente.
76
Interfaces Grficas
Las interfaces grficas de usuario (GUI) explotan
la capacidad de las computadoras para reproducir
imgenes y grficos en pantalla y brindan un
ambiente ms amigable, simple e intuitivo.
interfaz: medio de comunicacin entre entidades.
grfica: incluye ventanas, menes, botones, texto,
imgenes.
usuario: persona que usa la interfaz para controlar
un sistema

77
Interfaces Grficas
Una GUI es una coleccin de componentes
con una representacin grfica y capacidad
para percibir eventos generados por las
acciones del usuario.
Las componentes son las partes individuales a
partir de las cuales se conforma una interfaz
grfica. Por ejemplo, el botn para cerrar una
ventana, la barra de desplazamiento de una
ventana y la ventana misma.



78
Interfaces Grficas
Un usuario realiza una accin que genera un
evento ante el cual una componente tiene
una reaccin.
Una componente est asociada a un objeto
grfico que puede interactuar con el usuario.
Un objeto grfico es una instancia de una
clase grfica.
Algunos de los atributos de un objeto grfico
son atributos grficos y parte del
comportamiento ofrece servicios grficos.




79
Interfaces Grficas en Java
Una de las razones por las cuales Java ha llegado
a ser tan popular es que brinda herramientas
adecuadas para facilitar la construccin de
interfaces grficas de usuario (GUI).
Un paquete grfico ofrece una coleccin de
clases que pueden ser usadas para:
crear objetos grficos asociados a las
componentes de la interfaz
definir clases ms especficas a partir de las
cuales se crearn componentes.

80
Interfaces Grficas en Java
Algunos componentes son contenedores de otros
componentes.
Una ventana es un contenedor de alto nivel.
Un frame es un tipo especial de ventana sobre el
que puede ejecutarse una aplicacin.

Un objeto grfico de clase JFrame tiene atributos
marco, panel de contenido y tres botones.
La clase JFrame est provista en el paquete Swing
y especializa a las clases Frame y Window
provistas en el paquete AWT.



81
Interfaces Grficas en Java
Java ofrece diferentes paquetes grficos para
soportar la implementacin de grficos y GUIs.
AWT(Abstract Window Toolkit) y Swing son
paquetes grficos independientes de la plataforma,
para desarrollar interfaces grficas. Ambos brindan
una coleccin de clases que pueden especializarse
para crear botones, cajas de texto, menes, etc.
Una de las ventajas de Swing sobre AWT es que
permite desarrollar aplicaciones con una apariencia
similar a la de la plataforma subyacente con muy
poco esfuerzo.
Swing no reemplaza a AWT sino que la usa y agrega
nuevas clases.
82
Interfaces Grficas en Java
Cada clase de Swing modela un tipo de
componente.

Los tipos de componentes pueden agruparse en:

controles bsicos
displays interactivos con informacin altamente
formateada
displays con informacin no editable
contenedores

El paquete Swing

83
Interfaces Grficas en Java
El paquete Swing: Controles Bsicos
Son componentes simples que se usan principalmente para
tomar la entrada del usuario y mostrar un estado simple.

JButton JCheckBox JComboBox JList
JMenu JRadioButton
JSlider
84
Interfaces Grficas en Java
El paquete Swing: Displays interactivos con
informacin altamente formateada

JColorChooser JEditorPane JTextPane
85
Interfaces Grficas en Java
El paquete Swing: Displays con informacin
no editable

JLabel JProgressBar JSeparator JToolTip
86
Interfaces Grficas en Java
El paquete Swing: Contenedores

JApplet JFrame
JDialog
En toda interfaz hay al menos un componente contenedor

87


JPanel
JSplitPane JTabbedPane JToolBar
JScrollPane
Interfaces Grficas en Java
El paquete Swing: Contenedores

88


JInternalFrame JLayeredPane
JRootPane
Interfaces Grficas en Java
El paquete Swing: Contenedores

89
Interfaces Grficas en Java
La jerarqua de clases del paquete Swing
En esta jerarqua la relacin entre una clase derivada y una
clase base no siempre es de tipo isa.
90
Interfaces Grficas en Java
La jerarqua de clases del paquete Swing
javax.swing
Class JFrame
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
javax.swing.JFrame
La clase Frame agrega a la clase Window el
marco, la lnea de ttulo y los botones
La clase JFrame agrega a Frame el panel de
contenido
91
Caso de Estudio: Contador
Desarrolle una aplicacin que permita establecer incrementar
o decrementar un contador de acuerdo al botn que oprima
el usuario. La ventana inicialmente debe aparecer as:
El valor va a ir cambiando a medida que se oprimen los
botones.
92
class Test{
public static void main(String[] args) {

Contador cuadro = new Contador();
cuadro.setVisible(true);
}
}
Caso de Estudio: Contador
93
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Contador extends JFrame {

private int numero;
private JLabel numeroEtiqueta;
private JButton botonIncrementar,botonDecrementar;

public Contador() {
numero = 0;
setLayout(new FlowLayout());
setSize(200, 120);
setDefaultCloseOperation(EXIT_ON_CLOSE);
hacerGUI();
}
}


Caso de Estudio: Contador
94

private void hacerGUI(){
numeroEtiqueta = new JLabel("" + numero);
//Crea el boton incrementar, el oyente y lo registra
botonIncrementar = new JButton("Incrementar");
OyenteBotonI incrementar = new OyenteBotonI();
botonIncrementar.addActionListener(incrementar);
//Crea el boton decrementar, el oyente y lo registra
botonDecrementar = new JButton("Decrementar");
OyenteBotonD decrementar = new OyenteBotonD();
botonDecrementar.addActionListener(decrementar);
//inserta las componentes en el panel del frame
getContentPane().add(numeroEtiqueta);
getContentPane().add(botonIncrementar);
getContentPane().add(botonDecrementar);
}

}

Caso de Estudio: Contador
95
Caso de Estudio: Contador
Diferentes clases de componentes requieren
diferentes clases de oyentes para manejar los
eventos internos que los objetos disparan.

Un botn dispara eventos llamados eventos de
accin que son manejados por oyentes de accin.

Es decir un objeto de clase JButton genera un
objeto de la clase ActionEvent que es enviado
como parmetro a un objeto de una clase que
implementa a la interface ActionListener.
96

public class Contador extends JFrame {

private class OyenteBotonI implements ActionListener {
public void actionPerformed(ActionEvent event) {
numero++;
numeroEtiqueta.setText("" + numero);
}
}
private class OyenteBotonD implements ActionListener {
public void actionPerformed(ActionEvent event) {
numero--;
numeroEtiqueta.setText("" + numero);
}
}
}
Caso de Estudio: Contador
Implementamos los oyentes a travs de clases internas.
Esta alternativa es sencilla pero solo es adecuada para GUI
simples.
97
El programador redefine el mtodo
actionPerformed que no va a ser invocado
explcitamente por l mismo, sino que el mensaje
que provoca su ejecucin est incluido en algn
mtodo definido en una clase provista por Java.
Esto es, el programador define (o redefine) un
mtodo que l mismo NUNCA VA A INVOCAR al
menos explcitamente!
El mtodo recibe como argumento un objeto que
tampoco ha sido creado explcitamente por el
programador.
Caso de Estudio: Contador
98
Observemos que estamos considerando tres tipos
de objetos:

Los objeto fuente del evento
Los objetos evento
Los objetos oyentes (listeners)
Caso de Estudio: Contador
99
Los objetos fuente del evento, estn asociados a una
componente de la interfaz, tienen una representacin
grfica y son capaces de percibir y reaccionar ante un
evento externo provocado por una accin del usuario y
disparar eventos de software.
Los objetos evento que son disparados
implcitamente por un objeto fuente del evento.
Los objetos oyentes (listeners) que se ejecutan para
manejar un evento. La clase a la que pertenece un
objeto oyente brinda mtodos para manejar eventos, es
decir especifica el curso de accin a seguir en respuesta
a diferentes tipos de eventos.
Caso de Estudio: Contador
100
Algunos componentes son contenedores de
otros componentes.
Un frame es un tipo especial de contenedor
sobre el que puede ejecutarse una aplicacin.
Un frame es una instancia de la clase JFrame
y como tal tiene un atributo panel de
contenido.


Interfaces Grficas en Java
El panel de contenido tiene un atributo
layout o diagramado de acuerdo al cual se
organizan las componentes contenidas.
101
El layout de una ventana determina la apariencia
de la misma.
Un organizador de layout es un objeto que facilita
la distribucin de las componentes dentro de un
contenedor.
Algunas de las clases provistas para crear
organizadores son BorderLayout, FlowLayout,
GridLayout.
Cada clase tiene sus propias reglas de acuerdo a
las cuales distribuye las componentes en el
contenedor.

Interfaces Grficas en Java
Layout
102
FlowLayout
eti1 = new JLabel (primero);
eti2 = new JLabel (segundo);
eti3 = new JLabel (tercero);
getContentPane().setLayout(new FlowLayout());
getContentPane().add(eti1);
getContentPane().add(eti2);
getContentPane().add(eti3);
getContentPane().add(new JLabel(cuarto));




Permite crear organizadores muy simples, las
componentes se distribuyen de izquierda a
derecha en el orden en el que se agregan.
Interfaces Grficas en Java
103
GridLayout
eti1 = new JLabel (primero);
eti2 = new JLabel (segundo);
eti3 = new JLabel (tercero);
eti4 = new JLabel (cuarto);
getContentPane().setLayout(new GridLayout(3,2));
getContentPane().add(eti1);
getContentPane().add(eti2);
getContentPane().add(eti3);
getContentPane().add(eti4);





Las componentes se distribuyen en una grilla cuyo
nmero de filas y columnas se establece al
seleccionar la clase del organizador.
Interfaces Grficas en Java
104
BorderLayout
BorderLayout.SOUTH

BorderLayout.CENTER

BorderLayout.NORTH
BorderLayout
.WEST

BorderLayout
.EAST

Al agregarse cada componente se establece
la regin.
Interfaces Grficas en Java
105
BorderLayout
eti1 = new JLabel (primero);
eti2 = new JLabel (segundo);
eti3 = new JLabel (tercero);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(eti1,BorderLayout.NORTH);
getContentPane().add(eti2,BorderLayout.WEST);
getContentPane().add(eti3,BorderLayout.SOUTH);




Interfaces Grficas en Java
The Java Tutorials
http://download.oracle.com/javase/tutorial/uiswin
g/layout/index.html
106
Programacin Basada en Eventos
La construccin de una GUI utiliza un modelo de
programacin basado en eventos.
En este modelo el orden en el cual se ejecutan las
instrucciones de un programa queda determinado
por eventos.
Un evento es una seal de que algo ha ocurrido.
En esta materia consideraremos nicamente eventos
generados por acciones del usuario al interactuar
con la GUI.


Programacin Basada en Eventos
Algunas componentes de una GUI son reactivas,
pueden percibir las acciones del usuario y
reaccionar en respuesta a ellas.
Una componente reactiva estn asociada a un objeto
fuente del evento creado por el programador.
La reaccin del sistema en respuesta a la accin del
usuario va a quedar determinada por la clase a la que
pertenece un objeto oyente.
El objeto oyente est ligado al objeto fuente de
evento a travs de una instruccin de registracin.




Programacin Basada en Eventos
Un objeto fuente de evento tienen la capacidad
de percibir un evento externo y disparar un
evento interno, esto es, crear un objeto evento de
software.
Este objeto evento de software es el argumento de
un mensaje enviado al objeto oyente.
El mtodo que se ejecuta en respuesta a este
mensaje forma parte de una interface provista por
Java y es implementado por el programador en la
clase del oyente.




Desarrolle una aplicacin que permita establecer si color de
fondo de una ventana debe ser rojo o en verde de acuerdo al
botn que se apriete.
La ventana inicialmente debe aparecer as:
ste es el aspecto cuando se aprieta rojo o verde:
Programacin Basada en Eventos
Programacin Basada en Eventos

OBJETO
FUENTE
detecta el
evento
externo
JButton botonRojo
OBJETO
OYENTE
registrado
OBJETO
EVENTO
dispara un
evento
interno
Los dos
botones son
componentes
reactivas
El objeto oyente
recibe un mensaje
con el objeto evento
como parmetro
OyenteBotonR ponerR
ActionEvent e
La construccin de una GUI va a requerir
Definir clases que deriven de las clases grficas
provistas por Java.
Definir clases que implementen interfaces
grficas provistas por Java.
Crear objetos de las clases que definimos
derivando las clases de los paquetes Swing o AWT
Crear objetos de las clases provistas por el
paquete Swing o AWT
Crear objetos de las clases que implementan
interfaces
Interfaces Grficas en Java
La construccin de una GUI va a requerir
Definir clases que deriven de las clases grficas
provistas por Java.

Interfaces Grficas en Java
En el ejemplo vamos a definir una clase
GUIFondoRojoVerde que extiende a JFrame.
Como todo frame, un objeto de la clase
GUIFondoRojoVerde, tendr un borde, una barra de ttulo
con tres botones y un panel de contenido.
En el panel de contenido vamos a insertar dos botones
rotulados Rojo y Verde.

La construccin de una GUI va a requerir
Definir clases que implementen interfaces grficas
provistas por Java.
En el ejemplo definimos dos clases: OyenteBotonR
y OyenteBotonV cada una implementa a la interface
ActionListener definiendo el mtodo
actionPerfomed.
Interfaces Grficas en Java
La construccin de una GUI va a requerir
Crear objetos de las clases que implementan
interfaces
En el ejemplo creamos dos objetos oyente uno de
clase OyenteBotonR y otro OyenteBotonV
Interfaces Grficas en Java
La construccin de una GUI va a requerir
Crear objetos de las clases provistas por el paquete
Swing o AWT
En el ejemplo creamos dos objetos fuentes de
evento botonRojo y botonVerde ambos de la clase
JButton
Interfaces Grficas en Java
Interfaces Grficas en Java
La estructura de las GUI que hemos estamos
definiendo consta de:
Instrucciones para importar paquetes grficos.
La definicin de una clase que crea un frame de
una clase que extiende a JFrame y lo hace visible.
La definicin de la clase que extiende a JFrame e
incluye:
Atributos asociados a componentes de la GUI y
otros vinculados a la aplicacin
Un constructor
Clases que implementan interfaces y permiten
crear oyentes
Interfaces Grficas en Java
//importar paquetes
import java.awt.*;
import javax.swing.*;
...
public class GuiFondoRojoVerde extends JFrame {
//definir atributos asociados a las componentes
// de la GUI y de la aplicacin
private JButton botonRojo,botonVerde;

//definir el contructor de la clase que extiende a JFrame
public GuiFondoRojoVerde (){
//Crear los oyentes
OyenteBotonR ponerRojo = new OyenteBotonR();
OyenteBotonV ponerVerde = new OyenteBotonV();
...
}

//definir clases para los oyentes
class OyenteBotonR implements ActionListener {}
}
Interfaces Grficas en Java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GuiFondoRojoVerde extends JFrame {
private JButton botonRojo, botonVerde;
public GuiFondoRojoVerde (){
...
hacerGUI();
}
private void hacerGUI(){
...
}
class OyenteBotonR implements ActionListener {}
class OyenteBotonV implements ActionListener {}
}

Modulamos el cdigo a travs de un mtodo interno.
Interfaces Grficas
Un constructor o el mtodo invocado desde el constructor,
incluye instrucciones para:
establecer los valores de los atributos heredados de la
clase JFrame
crear objetos ligados a componentes grficas
crear objetos oyente
registrar los oyentes a los objetos fuente de evento
establecer el diagramado de los contenedores
establecer los atributos de las componentes
insertar las componentes en los contenedores

Interfaces Grficas
public GuiFondoRojoVerde (){
//establecer atributos heredados de JFrame
setLayout(new FlowLayout());
setSize(200, 120);
setDefaultCloseOperation(EXIT_ON_CLOSE);
hacerGUI(); }
private void hacerGUI(){
//crear los objetos ligados a las componentes grficas
botonRojo = new JButton("Rojo");
botonVerde = new JButton("Verde");
//Crear los objetos oyentes
OyenteBotonR ponerRojo = new OyenteBotonR();
OyenteBotonV ponerVerde = new OyenteBotonV();
//Registrar los oyentes
botonRojo.addActionListener(ponerRojo);
botonVerde.addActionListener(ponerVerde);
//Insertar los componentes en el panel del frame
getContentPane().add(botonRojo);
getContentPane().add(botonVerde);
}
Interfaces Grficas
public GuiFondoRojoVerde (){
//establecer atributos heredados de JFrame
setLayout(new FlowLayout());
setSize(200, 120);
setDefaultCloseOperation(EXIT_ON_CLOSE);
hacerGUI(); }
private void hacerGUI(){
//boton rojo
botonRojo = new JButton("Rojo");
OyenteBotonR ponerRojo = new OyenteBotonR();
botonRojo.addActionListener(ponerRojo);
getContentPane().add(botonRojo);
//boton verde
botonVerde = new JButton("Verde");
OyenteBotonV ponerVerde = new OyenteBotonV();
botonVerde.addActionListener(ponerVerde);
getContentPane().add(botonVerde);
}
Interfaces Grficas


class OyenteBotonR implements ActionListener {

public void actionPerformed(ActionEvent event){
getContentPane().setBackground(Color.red); }
}

class OyenteBotonV implements ActionListener {

public void actionPerformed(ActionEvent event) {
getContentPane().setBackground(Color.green);
}
}
}
La clase de cada oyente es interna a la clase que
especializa a JFrame
La ejecucin de una aplicacin con una interfaz
grfica de usuario convencional puede comenzar
creando un objeto de una clase que desciende
JFrame.
Un objeto que es instancia de JFrame tiene un
panel de contenido.
En el panel de contenido pueden agregarse otros
paneles, sobre los que a su vez se insertan otras
componentes (en particular otros paneles).
Paneles
El uso de varios paneles facilita la organizacin de
componentes utilizando distintos diagramados y
estilos.
Por ejemplo, un panel puede contener tres botones
distribuidos en forma vertical y otro panel puede
tener una etiqueta y dos botones debajo, uno al lado
del otro.
Cada panel tiene entonces un diagramado diferente.
Ambos paneles se agregan al panel de contenido,
que tendr su propio layout o diagramado.
Paneles
En el ejemplo de los botones rojo y verde, los dos
botones se agregaban directamente al panel de
contenido:

Paneles


botonRojo = new JButton("Rojo");

getContentPane().add(botonRojo);



El mensaje getContentPane() es enviado al frame y
retorna un objeto de la clase Container
Como todo contenedor, el panel de contenido puede
recibir mensaje add.
Una alternativa ms adecuada es organizar las
componentes de una GUI de manera jerrquica.
Esto es, el panel de contenido contiene dos paneles,
en uno se ubican los botones y en otro se establece
el color elegido.
El panel de contenido va a tener un organizador de
layout que determina como se distribuyen los dos
paneles.
El panle de botones tiene un organizador de layout
que determina como se ubican los dos botones.

Paneles
Paneles
Desarrolle una aplicacin que permita establecer si color de
fondo de una ventana debe ser rojo o en verde de acuerdo al
botn del panel que se apriete.
La ventana inicialmente debe aparecer as:
ste es el aspecto cuando se aprieta rojo o verde:
import
public class GUIColorFondoPaneles
extends JFrame {
private Container contenedor;
private JPanel panelColor, panelBotones;
private JButton botonRojo, botonVerde;

public GUIColorFondoPaneles(){
contenedor = getContentPane();
//layout del panel de contenido
contenedor.setLayout(new BorderLayout());
setSize(320,180);
setDefaultCloseOperation(EXIT_ON_CLOSE);
hacerGUI();

}
}
Paneles
Se captura el panel de contenido del frame
Paneles
private void hacerGUI(){
//Se crean los paneles
panelColor = new JPanel();
panelBotones = new JPanel();
//Se crean los botones y los oyentes
botonRojo = new JButton("Rojo");
OyenteBotonR ponerRojo = new OyenteBotonR();
botonRojo.addActionListener(ponerRojo);
botonVerde = new JButton(Verde");
OyenteBotonV ponerVerde = new OyenteBotonV();
botonVerde.addActionListener(ponerVerde);
//Se agregan los botones al panel de botones
panelBotones.add(botonRojo);
panelBotones.add(botonVerde);
//Se agregan los paneles al panel de contenido
contenedor.add(panelColor,BorderLayout.NORTH);
contenedor.add(panelBotones,BorderLayout.SOUTH);
}

Paneles
private void hacerGUI(){
//Se crean los paneles y se establecen atributos
panelColor = new JPanel();
panelBotones = new JPanel();
panelColor.setBackground(Color.GRAY);
panelColor.setPreferredSize
(new java.awt.Dimension(300, 0));
panelBotones.setBackground(Color.WHITE);
panelBotones.setPreferredSize
(new java.awt.Dimension(300, 40));

}

Modificamos los atributos los dos paneles
Modificar el layout de panelBotones para que un botn
quede encima del otro.
Paneles



botonRojo = new JButton("Rojo");
OyenteBotonR ponerRojo = new OyenteBotonR();
botonRojo.addActionListener(ponerRojo);









}

private class OyenteBotonR implements
ActionListener {
public void actionPerformed(ActionEvent event){
panelColor.setBackground(Color.red);}
}
Campos de texto
Un campo de texto es una caja que permite ingresar
una lnea de texto por teclado.
Un objeto de la clase JTextField permite
mantener un campo de texto
Cada vez que el usuario tipea una tecla se disparan
uno o ms eventos de tecla, esto es, se crean objetos
de clase KeyEvent o de la clase ActionEvent.
Nos interesa capturar los eventos de clase
ActionEvent que se disparan cuando el usuario
oprime Enter despus de tipear una cadena.



Implementar una GUI que permita ingresar el color con el que se
desea pintar el panel, en una caja de texto. El color debe
ingresarse con minscula. Si se ingresa rojo, verde o azul, el
panel se pinta del color respectivo; si no, se pinta del color de
fondo, que es gris claro.
Campos de texto

public class GUIColorFondoCajaTexto extends JFrame {

private Container contenedor;
private Color colorFondo;
private JPanel panelColor, panelTexto;
private JTextField cajaColor;

public GUIColorFondoCajaTexto (){
contenedor = getContentPane();
contenedor.setLayout(new GridLayout(2, 1));
setSize(300,180);
setDefaultCloseOperation(EXIT_ON_CLOSE);
hacerGUI();

}
Para ingresar texto usamos un objeto de la clase
JTextField.
Campos de texto
private void hacerGUI(){


colorFondo=new Color(200,200,200);

panelColor = new JPanel();
panelColor.setBackground(colorFondo);
panelColor.setPreferredSize
(new java.awt.Dimension(300,100));

panelTexto = new JPanel();
panelTexto.setBackground(Color.GRAY);
panelTexto.setPreferredSize
(new java.awt.Dimension(300, 50));


}
Campos de texto
private void hacerGUI(){



cajaColor = new JTextField(15);
OyenteCaja cColor = new OyenteCaja();
cajaColor.addActionListener(cColor);

panelTexto.add(cajaColor);
contenedor.add(panelTexto);
contenedor.add(panelColor);




}
Campos de texto
public class GUIColorFondoCajaTexto extends JFrame {

private class OyenteCaja implements
ActionListener {
public void actionPerformed(ActionEvent event){
String s = cajaColor.getText();
if (s.equals("rojo"))
panelColor.setBackground(Color.red);
else if (s.equals("verde"))
panelColor.setBackground(Color.green);
else if (s.equals("azul")
panelColor.setBackground(Color.blue);
else
panelColor.setBackground(colorFondo);
}
}
}

Campos de texto
Cuadro de Dilogo
Un cuadro de dilogo es una ventana que en
general se usa para leer un valor simple y/o mostrar
un mensaje. Incluye adems uno o ms botones.
El mensaje puede ser un error o una advertencia y
puede estar acompaado de una imagen o algn
otro elemento.
Para definir un dilogo standard usamos la clase
JOptionPane.
Las clases Printing, JColorChooser y
JFileChooser permiten ofrecer dilogos ms
especficos.
Para crear un dilogo a medida se usa la clase
JDialog directamente.







Cuadro de Dilogo
Todo dilogo es dependiente de un frame.
Cuando un frame se destruye, tambin se
destruyen los dilogos que dependen de l.
Un dilogo es modal cuando bloquea la entrada de
datos del usuario a travs de todas las dems
ventanas.
Los cuadros de dilogo creados con
JOptionPane son modales.
Para crear un dilogo no modal usamos JDialog
directamente.






Caso de Estudio: Cuenta Bancaria
Se desea modelar una cuenta bancaria sobre la
que se realizan depsitos, extracciones y
consultas de saldo.
La cuenta bancaria tiene asociado un cdigo y un
saldo. El cdigo la identifica unvocamente y es
fijo. El saldo aumenta cuando el titular de la
cuenta efecta un depsito y disminuye cuando
realiza una extraccin.
El usuario est autorizado a girar en descubierto
hasta un monto mximo establecido.
El usuario opera con su cuenta bancaria a travs
de una interfaz grfica como la que sigue
Caso de Estudio: Cuenta Bancaria
Si el usuario presiona el botn Depositar en pantalla
aparece un cuadro de dilogo como el que sigue:
Si el usuario presiona el botn OK aparece en pantalla un
mensaje.
Caso de Estudio: Cuenta Bancaria
Anlogamente si el usuario presiona el botn Extraer en
pantalla aparece un cuadro de dilogo como el que
sigue:
Si el usuario presiona el botn OK aparece en pantalla un
mensaje
Caso de Estudio: Cuenta Bancaria
Si el usuario presiona el botn Consultar Saldos en
pantalla aparece un
O bien
Caso de Estudio: Cuenta Bancaria
Caso de Estudio: Cuenta Bancaria
class Cajero
public static void main(String[] args) {
GUI_CtaBancaria unaCuenta = new GUI_CtaBancaria();
unaCuenta.setVisible(true);
}
}
import
public class GUI_CtaBancaria extends JFrame {
private CuentaBancaria cuenta;
private Container contenedor;
private JPanel panelAcciones,panelConsulta;
private JButton botonConsultar,
botonExt, botonDep;

public GUI_CtaBancaria() {

}

}

Caso de Estudio: Cuenta Bancaria
Crear la Cuenta Bancaria
Capturar el panel de contenido
Crear el panel de acciones y de consulta
Crear cada uno de los botones y su oyente
Registrar cada oyente a su botn
Agregar los botones a los paneles correspondientes
Agregar los paneles al panel de contenido


Caso de Estudio: Cuenta Bancaria
public GUI_CtaBancaria() {
cuenta = new CuentaBancaria(3);
contenedor = getContentPane();
panelAcciones = new JPanel();
panelConsulta = new JPanel();
botonDep = new JButton();
botonExt = new JButton();
botonConsultar = new JButton();
setSize(210, 210);
setDefaultCloseOperation(EXIT_ON_CLOSE);
armarGUI();
}

Caso de Estudio: Cuenta Bancaria
public void armarGUI() {

OyenteDepositar oDepositar=new OyenteDepositar();
OyenteExtraer oExtraer = new OyenteExtraer();
OyenteConsultar oConsultar =new OyenteConsultar();

botonDep.setPreferredSize(new Dimension(124, 50));
botonDep.setSize(150, 50);
botonDep.setBorder(BorderFactory.createCompoundBorde(
new LineBorder
(new java.awt.Color(0, 0, 0), 1, false),null));
botonDep.addActionListener(oDepositar);


}
Caso de Estudio: Cuenta Bancaria
public void armarGUI() {

botonExt.setText("Extraer");
botonExt.setPreferredSize(new Dimension(124, 50));
botonExt.setSize(150, 50);
botonExt.setBorder(BorderFactory.createCompoundBorder(
new LineBorder(
new java.awt.Color(0, 0, 0), 1, false),null));
botonExt.addActionListener(oExtraer);


}
Caso de Estudio: Cuenta Bancaria
public void armarGUI() {

botonConsultar.setText("Consultar Saldo");
botonConsultar.setPreferredSize(new Dimension(136,
30));
botonConsultar.setSize(150, 30);
botonConsultar.setBorder
(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
botonConsultar.addActionListener(oConsultar);


}
Caso de Estudio: Cuenta Bancaria
public void armarGUI() {

// Layout del panel contenedor
contenedor.setLayout(new BorderLayout());

// Panel de Acciones
panelAcciones.setBorder(
BorderFactory.createEtchedBorder(BevelBorder.LOWERED));
panelAcciones.setPreferredSize(
new Dimension(160, 130));
panelAcciones.setSize(160, 125);


}
Caso de Estudio: Cuenta Bancaria
public void armarGUI() {

// Agregar botones a los paneles

panelAcciones.add(botonDep);
panelAcciones.add(botonExt);
panelConsulta.add(botonConsultar);

// Agregar los paneles al contenedor
contenedor.add(panelAcciones, BorderLayout.NORTH);
contenedor.add(panelConsulta, BorderLayout.SOUTH);
}
Caso de Estudio: Cuenta Bancaria
Caso de Estudio: Cuenta Bancaria
Agregar el oyente asociado al botn


Caso de Estudio: Cuenta Bancaria
Agregar el oyente asociado al botn


Agregar el oyente asociado al botn


Caso de Estudio: Cuenta Bancaria
private class OyenteDepositar implements ActionListener {
public void actionPerformed(ActionEvent event){
float dep;
String deposito;
JOptionPane dialogo = new JOptionPane();

deposito = dialogo.showInputDialog
( "Ingrese la cantidad a depositar" );
if ((deposito != null) && (deposito.length() > 0)){
dep = Float.parseFloat(deposito);
dialogo.showMessageDialog(null,
"Usted deposit " + dep+ " pesos","Depsito",
JOptionPane.PLAIN_MESSAGE );
cuenta.depositar(dep);
}
}

}


Caso de Estudio: Cuenta Bancaria
private class OyenteExtraer implements ActionListener {
public void actionPerformed(ActionEvent event){
float ext;
String extraccion;
JOptionPane dialogo = new JOptionPane();
extraccion = dialogo.showInputDialog
( "Ingrese la cantidad a extraer" );
Caso de Estudio: Cuenta Bancaria
private class OyenteExtraer implements ActionListener {
public void actionPerformed(ActionEvent event){
float ext;
String extraccion;

if ((extraccion != null) && (extraccion.length() > 0)){
ext = Float.parseFloat(extraccion);
if (cuenta.puedeExtraer(ext)){
JOptionPane.showMessageDialog( null,
"Usted extrajo "+ext+ " pesos",
"Extraccin", JOptionPane.PLAIN_MESSAGE );
cuenta.extraer(ext) ;}
else
dialogo.showMessageDialog( null,
"Usted NO puede extraer esa cantidad,
"Advertencia", JOptionPane.WARNING_MESSAGE );
}}}


Caso de Estudio: Cuenta Bancaria
private class OyenteConsultar implements ActionListener {
public void actionPerformed(ActionEvent event){
JOptionPane dialogo = new JOptionPane();

if (cuenta.obtenerSaldo()>=0)
dialogo.showMessageDialog(null,
"Usted tiene un saldo de " + cuenta.obtenerSaldo()+
" pesos,"SALDO,JOptionPane.INFORMATION_MESSAGE );
else
dialogo.showMessageDialog(null,
"Usted est en rojo en " +
(-1)*cuenta.obtenerSaldo() + " pesos,
"SALDO", JOptionPane.ERROR_MESSAGE );
}
}


Caso de Estudio: Cuenta Bancaria
Conectamos la clase CuentaBancaria a una GUI sin
modificar el cdigo que est completamente
encapsulado.

La clase CuentaBancaria es proveedora de
servicios

La clase GUICuentaBancaria usa CuentaBancaria
como una caja negra, conoce nicamente la
interface y el contrato.

Podemos modificar la GUI sin cambiar la clase
asociada y viceversa.




GUI y Encapsulamiento
Paneles JPanel
Etiquetas JLabel
Textos JTextField JTextArea
Botones JButton, JRadioButton
Combo box JComboBox
Dilogos JOptionPane
JComponent
Interfaces Grficas en Java
La jerarqua de clases grficas
JComponent
JFrame
La jerarqua de clases del paquete Swing
Interfaces Grficas en Java
JButton
JComboBox
JLabel
JTextField
JLabel JOptionPane JPanel
Un panel es un rea sobre la que trabaja el usuario
o se colocan otras componentes.
Nosotros solo usaremos paneles como
contenedores de otros paneles u otro tipo de
componentes.
Para definir un panel creamos un objeto de la clase
JPanel.
El principal atributo de un panel es el diagramado o
layout que permite especificar como se organizan
las dems componentes.

Paneles
Los paneles van a quedar organizados de manera
jerrquica.
Esto es, el panel de contenido contiene paneles que
a su vez pueden contener a otros paneles.
El panel de contenido va a tener su organizador de
layout y para cada uno de los paneles en que se
divide podemos establecer tambin un organizador
de layout.

Paneles
Una etiqueta es una componente grfica que
permite mostrar una imagen o un texto esttico.
Para definir una etiqueta creamos un objeto de la
clase JLabel.
Una etiqueta tiene un tamao, un cono y un texto.

Etiquetas
JLabel(String s)
JLabel(String s, int alineacion)
JLabel(Icon i)
JLabel(Icon i, int alineacion)
JLabel(String s, Icon i)
JLabel(String s, Icon i, int alineacion)
JLabel()
Campos de Texto
Los constructores son:

JTextField()
JTextField(Document doc, String text, int col)
JTextField(int col)
JTextField(String text)
JTextField(String text, int col)
Un campo de texto es una caja que permite
ingresar una lnea de texto por teclado.
Para definir un campo de texto creamos un objeto
de la clase JTextField
Los atributos son la cadena, la cantidad de
caracteres y el modelo a utilizar.
Dilogos
Un dilogo es una ventana que mantiene
informacin temporaria .
En general incluye un mensaje de error o de
advertencia, pero tambin puede incluir una
imagen o un rbol de directorio. Tambin incluye
uno o ms botones.
Usaremos la clase JOptionPane para crear
cuadros de dilogo simples.
Un dilogo de la clase JOptionPanel se dice
modal.
Un dilogo modal es visible, bloquea las entradas
del usuario en todas las otras ventanas del
programa.


Dilogos
Los atributos de un objeto de clase JOptionPane son:
cono, texto del ttulo, texto del mensaje y texto del
botn
Podemos utilizar un icono personalizado, no utilizar
ninguno, o utilizar uno de los cuatro iconos standard
de JOptionPane (question, information, warning, y
error).




Los servicios provistos por JOptionPane son:
showMessageDialog
showConfirmDialog
showOptionDialog
showInputDialog


Dilogos
showMessageDialog
Muestra un dilogo modal con un botn, etiquetado "OK". Se
puede especificar el icono y el texto del mensaje y del ttulo. Por
omisin el cono es de informacin
showConfirmDialog
Muestra un dilogo modal con dos botones, etiquetados "Yes" y
"No". Por omisin aparece el cono question.
showOptionDialog
Debemos especificar el texto de los botones.
showInputDialog
Muestra un dilogo modal que obtiene una cadena del usuario.
La cadena puede ser ingresada por el usuario en un cuadro de
texto o elegida de un ComboBox no editable.
Por omisin aparece el cono question.


Radio Button
Un radio button permite que el usuario seleccione
una entre varias opciones alternativas de un grupo
de botones.
Para usar un grupo de botones creamos un objeto
de la clase JRadioButton.
La definicin de un grupo asegura que slo una de
las alternativas est seleccionada.

Los constructores de un objeto de clase JLabel
son:

JRadioButton(String s)
JRadioButton(String s, boolean b)
JRadioButton(Icon i)
JRadioButton(Icon i, boolean b)
JRadioButton(String s, Icon i)
JRadioButton(String s, Icon i, boolean b)
JRadioButton()

Radio Button
Combo box
Un combo box permite que el usuario seleccione
una entre varias opciones alternativas.
Para usar un combo box creamos un objeto de la
clase JComboBox.
Combo box
El combo box puede ser no editable o editable. Un
combo box no editable consta de una lista de
valores drop-down y un botn.
Un combo box editable tiene adems un campo de
texto con un pequeo botn.
El usuario puede elegir una opcin de la lista o
tipear un valor en el campo de texto.
Los combo box se usan como alternativa a los radio
buttons y las listas.
Combo box
Combo box no
editable antes y
despus de hacer
click sobre el botn.
Combo box
editable antes y
despus de hacer
click sobre el
botn.
Objetos y Eventos
Cada componente de una GUI est asociada a un
objeto grfico de alguna subclase de Component
Los objetos grficos reactivos son objetos fuente
de evento.
Cuando un objeto fuente de evento dispara un
evento interno, crea objetos evento de alguna
subclase de EventObject provista en el
paquete java.awt.event.
La creacin es implcita.

Clase de los objetos
Fuente de evento
Clases de los objetos
evento
JButton ActionEvent
JTextField ActionEvent, KeyEvent
JComboBox ActionEvent, ItemEvent
JLabel ActionEvent, ItemEvent
JMenuItem ActionEvent
JCheckBox ActionEvent, ItemEvent
Component ComponentEvent,
MouseEvent, KeyEvent,
Objetos y Eventos
La clase de un objeto fuente de evento determina
las clases de los objeto evento que se crearn
implcitamente:
El objeto fuente de evento asociado a la
componente reactiva
dispara un evento interno
creando objetos de alguna subclase de
EventObject
El usuario realiza una accin sobre una
componente reactiva que genera un evento
externo
Objetos y Eventos
OBJETO
FUENTE
Component
Evento
Interno
OBJETO
EVENTO
EventObject
percibe dispara
crea
Evento
Externo
Los objetos de las clases JButton, JTextField,
JComboBox son objetos fuente de eventos que crean
objetos evento de clase ActionEvent.
Esto es, cuando el usuario realiza una accin sobre la
componente asociada al objeto fuente de evento, este
crea un objeto de clase ActionEvent
La clase del objeto oyente que escuche estos eventos
deben implementar la interface ActionListener del
paquete java.awt.event.

Objetos y Eventos
Implementar una interface implica definir un
mtodo manejador del evento de acuerdo al
comportamiento esperado en respuesta a la
accin del usuario.
Cualquier objeto de alguna subclase de las
mencionadas crear tambin objetos evento de
clase ActionEvent.
Observemos que los objetos de algunas clases
crearn eventos de la clase ItemEvent.
Objetos y Eventos
Objetos y Eventos
Cada subclase de EventObject define atributos y
mtodos adecuados para un tipo particular de accin
del usuario, como por ejemplo, mover el mouse sobre un
panel, oprimir una tecla o activar un botn.
En cada uno de estos casos se crear un objeto evento
de una clase especfica.
Objetos y Eventos
OBJETO
FUENTE
Component
Evento
Interno
OBJETO
EVENTO
EventObject
percibe dispara
crea
Evento
Externo
OBJETO
Oyente
ActionListener
El objeto oyente es instancia de una
clase que implementa una interface y
redefine el mtodo responsable de
reaccionar ante la accin del usuario
El objeto evento es un parmetro
para el mtodo manejador del evento
registrado a
La clase a la que pertenece el objeto fuente de
evento contiene el cdigo que:
percibe el evento externo
dispara el evento interno
invoca al manejador de evento definido en la
clase del oyente.
Objetos y Eventos
La interface define uno o ms mtodos manejadores que
deben ser implementados considerando el
comportamiento esperado en respuesta a la accin del
usuario.
La lista de parmetros de un manejador de eventos
siempre consiste en un argumento del tipo de clase
evento.
Objetos y Eventos
Objeto Evento Interface de oyente Manejador
ActionEvent ActionListener actionPerformed(ActionEvent)
ItemEvent ItemListener itemStateChanged(ItemEvent)
MouseEvent MouseListener mousePressed(MouseEvent)
mouseReleased(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mouseClicked(MouseEvent)
KeyEvent KeyListener keyPressed(KeyEvent)
keyRealesed(KeyEvent)
keyTyped(KeyEvent)
Objetos y Eventos
GUI Polimorfismo y Ligadura Dinmica

botonRojo.addActionListener(ponerRojo);
cajaColor.addActionListener(cColor);
JButton
JTextField
OyenteBotonRojo
OyenteCaja
En qu clase se define addActionListener?
De qu clase debera ser el parmetro?


Maquina Expendedora
Una fbrica produce dos tipos diferentes de mquinas
expendedoras de infusiones, M111 y R101.
Las mquinas del tipo M111 preparan caf, caf con
leche, t, t con leche y submarino. Tienen depsitos
para los siguientes ingredientes: caf, t, leche y cacao.
Las mquinas de tipo R101 preparan caf, t y caf
carioca . Tienen depsitos para caf, t, crema y cacao.


Maquina Expendedora
Los depsitos tienen las siguientes capacidades
mximas:
Caf 1500
T 1000
Leche 600
Cacao 600
Crema 600
Adems de la capacidad mxima de cada ingrediente,
cada mquina mantiene registro de la cantidad
disponible.
Maquina Expendedora
Cuando se habilita una mquina las cantidades
disponibles comienzan con el valor mximo de cada
ingrediente.
La cantidad disponible aumenta cuando se carga el
depsito con un ingrediente especfico y disminuye cada
vez que se prepara una infusin.
El aumento es variable, aunque nunca se puede superar
la capacidad mxima de cada ingrediente.
Si el valor que se intenta cargar, sumado al disponible,
supera al mximo, se completa hasta el mximo y
retorna el sobrante.
Maquina Expendedora
Cada vez que se solicita una infusin se reducen los
ingredientes de acuerdo a la siguiente tabla:


Caf Caf con
leche
Submarino T con
leche
caf carioca
Caf 40 30 30
Leche 20 50 20
T 20
Cacao 40 10
Crema 30
En el caso de la preparacin de una taza de t, la mquina
M111 utiliza 10 grs y la mquina R101 15 grs.


MaquinaExpendedora
<<atributos de instancia>>
caf
t
cacao
<<comandos>>
cafe()
<<consultas>>
obtenerCafe() : entero
M111
<<atributos de instancia>>
leche
<<comandos>>
teConLeche()
submarino()
<<consultas>>
obtenerLeche() : entero
R101
<<atributos de instancia>>
crema
<<comandos>>
carioca ()
<<consultas>>
obtenerCrema(): entero

Maquina Expendedora
Comenzaremos implementando parcialmente una GUI para
una mquina expendedora del modelo R101


Maquina Expendedora
Inialmente est activo el botn para
preparar caf y uno para el
Empleado que permite cargar
ingredientes
Si se oprime el botn Caf aparece un cartel informativo y
el nico botn activo es el que debe seleccionarse al retirar
el vaso


Cuando oprime el botn correspondiente a una infusin y la mquina puede prepararla, se observa lo que s muestra la segunda figura. En el caso de no poder obtenerse la bebida, se muestra lo que se observa en la figura 3. En cada caso, se debe apretar la tecla habilitada para volver a la primera ventana.
El botn con el texto Empleado debe cargar la mquina al mximo y debe informar al empleado, mediante una caja de mensaje, cunto se carg de cada ingrediente.

Maquina Expendedora
Si la cantidad de ingredientes no es suficiente se muestra
un cartel y se activa el botn que permite volver al estado
inicial.


Maquina Expendedora
Si se elige el botn Empleado se cargan todos los
ingredientes hasta llegar al mximo y aparece un cartel
informativo:




Maquina Expendedora
Al oprimir Aceptar vuelve a aparecer la pantalla inicial.


Maquina Expendedora
panelBotones
panelES
panelRetirar
panelEmpleado
Maquina Expendedora
botonCafe
botonRetirarInfusion
botonEmpleado
Maquina Expendedora
cartelBebida
cartelSalida
Maquina Expendedora

public class GUI_R101 extends JFrame {

private R101 unaMaquina;
private Container contenedor;
private JPanel panelBotones, panelES,
panelRetirar, panelEmpleado;
private JLabel cartelSalida,cartelBebida;
private JButton botonCafe,
botonRetirarInfusion,
botonEmpleado;


}
Un constructor incluye instrucciones para:
capturar el panel de contenido
crear paneles, etiquetas y botones
crear objetos oyente para los botones
establecer el diagramado y atributos de los
paneles
establecer los atributos de etiquetas y botones
insertar botones y etiquetas en los paneles y los
paneles en el panel de contenido
Maquina Expendedora
Maquina Expendedora
public GUI_R101() {
unaMaquina = new R101();

contenedor = getContentPane();
botonCafe = new JButton() ;
botonRetirarInfusion = new JButton() ;
botonEmpleado = new JButton() ;
cartelSalida = new JLabel();
cartelBebida = new Jlabel();
panelBotones = new JPanel();
panelES = new JPanel() ;
panelRetirar = new JPanel() ;
panelEmpleado = new JPanel() ;
initGUI();
}


Maquina Expendedora
private void initGUI() {

BoxLayout esteLayout = new
BoxLayout(contenedor,BoxLayout.Y_AXIS) ;
contenedor.setLayout(esteLayout);

OyenteCafe oCafe = new OyenteCafe();
botonCafe.setText("Caf");
botonCafe.setFont(new Font("Arial",1,22));
botonCafe.addActionListener(oCafe);



}
Maquina Expendedora
private void initGUI() {


OyenteRetirar oRetirar = new OyenteRetirar();

botonRetirarInfusion.setText
("Apriete aqu para retirar su infusin o pedir otra");
botonRetirarInfusion.setEnabled(false);
botonRetirarInfusion.setFont(new
Font("SansSerif",1,14));
botonRetirarInfusion.setBorder
(BorderFactory.createEtchedBorder(BevelBorder.LOWERED));
botonRetirarInfusion.setPreferredSize
(new Dimension(360, 32));
botonRetirarInfusion.addActionListener(oRetirar);



}
Maquina Expendedora
private void initGUI() {


OyenteEmpleado oEmpleado = new OyenteEmpleado();

botonEmpleado.setText("Empleado");
botonEmpleado.setPreferredSize(new Dimension(306, 55));
botonEmpleado.setFont(new Font("Times New Roman",0,18));

botonEmpleado.addActionListener(oEmpleado);


}
Maquina Expendedora
private void initGUI() {

GridLayout panelBotonesLayout = new GridLayout(4, 1) ;

panelBotonesLayout.setHgap(5);
panelBotonesLayout.setVgap(5);
panelBotones.setLayout(panelBotonesLayout);
panelBotones.setPreferredSize(new Dimension(392, 369));
panelBotones.setSize(369, 250);
panelBotones.setBackground(new Color(235,235,235));



}
Maquina Expendedora
private void initGUI() {

panelES.setPreferredSize(new Dimension(392, 101));
panelES.setSize(369, 51);
panelES.setBorder
(BorderFactory.createBevelBorder(BevelBorder.LOWERED));


}
Maquina Expendedora
private void initGUI() {

cartelSalida.setLayout(new FlowLayout());
cartelSalida.setBorder (new LineBorder
(new Color(0,0,0), 1, false));
cartelSalida.setPreferredSize(new Dimension(277, 45));
cartelSalida.setHorizontalAlignment
(SwingConstants.CENTER);
cartelSalida.setHorizontalTextPosition
(SwingConstants.LEFT);
cartelSalida.setFont(new Font("Arial",0,14));

cartelBebida.setText("");
cartelBebida.setHorizontalAlignment
(SwingConstants.CENTER);
cartelBebida.setPreferredSize(new Dimension(88, 88));
}
Maquina Expendedora
private void initGUI() {


panelRetirar.setPreferredSize(new Dimension(392, 50));



}
Maquina Expendedora
private void initGUI() {


panelEmpleado.setPreferredSize(new Dimension(392, 64));
panelEmpleado.setBackground(new Color(235,235,235));




}
Maquina Expendedora
private void initGUI() {

panelBotones.add(botonCafe);
contenedor.add(panelBotones);

panelES.add(cartelSalida);
panelES.add(cartelBebida);
contenedor.add(panelES);

panelRetirar.add(botonRetirarInfusion);
contenedor.add(panelRetirar);

panelEmpleado.add(botonEmpleado);
contenedor.add(panelEmpleado);
}
Maquina Expendedora
public class GUI_R101 extends JFrame {
public GUI_R101() {

}
private void initGUI() {

}
private void deshabilitarBotones(){
botonCafe.setEnabled(false);
botonRetirarInfusion.setEnabled(true);;
botonEmpleado.setEnabled(false);
}

private void habilitarBotones(){
botonCafe.setEnabled(true);
botonRetirarInfusion.setEnabled(false);;
botonEmpleado.setEnabled(true);
}
}
Maquina Expendedora
public class GUI_R101 extends JFrame {

class OyenteCafe implements ActionListener{

public void actionPerformed(ActionEvent evt) {

int cantVasos = unaMaquina.vasosCafe();
if (cantVasos>=1){
unaMaquina.cafe();
cartelSalida.setText("Aqu tiene su caf");
cartelBebida.setText("CAF"); }
else {
cartelSalida.setText("No puede preparar caf");
cartelBebida.setText(""); }
deshabilitarBotones();
}
}

}
Maquina Expendedora
public class GUI_R101 extends JFrame {


class OyenteRetirar implements ActionListener{

public void
actionPerformed(ActionEvent evt) {

cartelSalida.setText("");
cartelBebida.setText("");
habilitarBotones();
}

}

}
Maquina Expendedora
public class GUI_R101 extends JFrame {


class OyenteEmpleado implements ActionListener{

public void actionPerformed(ActionEvent evt) {

int cafeCargado;
JOptionPane dialogo = new JOptionPane();
cafeCargado = unaMaquina.obtenerMaxCafe()-
unaMaquina.cargarCafe(unaMaquina.obtenerMaxCafe());

dialogo.showMessageDialog(null,"Se carg "+
cafeCargado+ " grs de caf, ,"Maquina cargada ,
JOptionPane.INFORMATION_MESSAGE); }
}

}
Maquina Expendedora
botonCafe
botonTe
botonCafeCarioca
Complete la implementacin con los botones que faltan
Maquina Expendedora
botonCafe
botonTe
botonCafeCarioca
botonBahiano
Implemente una GUI para la mquina R101 Plus
panelBotones
panelES
panelRetirar
panelEmpleado
botonCafe
botonRetirarInfusion
botonCafeEmpleado
cartelSalida
cartelBebida
La GUI incluye diferentes tipos de componentes pero en este
caso slo los botones son reactivos.
Maquina Expendedora

public class GUI_R101 extends JFrame {
private R101 unaMaquina;

private Container contenedor;
private JPanel panelBotones, panelES,
panelRetirar, panelEmpleado;
private JLabel cartelSalida,cartelBebida;
private JButton botonCafe,

botonRetirarInfusion,botonEmpleado;

}
Maquina Expendedora
Componentes - Canvas
La clase Canvas permite representar elementos
grficos en pantalla.
A travs de su mtodo paint(Graphics g) se realizan
todos los dibujos sobre el canvas.
Es la ocurrencia de la clase Graphics la que permite
realmente pintar elementos grficos, el canvas es el
soporte.
Graphics2D hereda de Graphics, aportando una
mayor funcionalidad. A travs de un downcasting se
puede utilizar este objeto ms refinado.
Graphics2D g2d = (Graphics2D) g;
Componentes - Canvas
Clase Graphics
Mtodos:
drawString(String, int, int)
drawOval(int, int, int, int)
drawRect(int, int, int, int)
drawArc(int, int, int, int, int, int)
drawImage(Image, int, int, ImageObserver)
drawLine(int, int, int, int)
drawPolygon(int[], int[], int)
setColor(Color)
setFont(Font)
Componentes - Canvas
Crear un rea de dibujo:
class MiCanvas extends Canvas implements MouseListener
{
int x=50;int y=50;int radioX=30;int radioY=30;
MiCanvas()
{
this.setBackground(Color.white);
this.addMouseListener(this);
this.setFont(new Font("Courier", Font.BOLD, 24));
this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
}
public void paint(Graphics g)
{
g.setColor(Color.red);
g.drawString("Dibuja Circunferencias",50,20);
g.setColor(Color.blue);
g.drawLine(50,40,340,40);
g.setColor(Color.green);
g.drawOval(x,y,radioX, radioY);
}
Componentes Canvas (continuacin)
public void mousePressed(MouseEvent e)
{
x=e.getX();
y=e.getY();
}

public void mouseReleased(MouseEvent e)
{
radioX=(e.getX()-x);
radioY=(e.getY()-y);
this.repaint();
}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mouseClicked(MouseEvent e) {}
}

Posteriormente se podr aadir una ocurrencia de la clase
MiCanvas a cualquier Frame como un componente ms
Eventos java.awt.event
Este paquete proporciona las clases e interfaces
necesarias para gestionar los diferentes tipos de eventos
de los componentes de AWT.
Los eventos ms importantes que una aplicacin grfica
puede registrar son:
Ratn
Ratn (Drag & Drop)
Accin
Teclado
Ventana
Un evento del tipo accin se produce cuando se acciona algn
control
Eventos java.awt.event
Para que los componentes puedan recibir eventos deben registrarse
previamente indicando qu clase va a
gestionarlos.
Esta tarea se realiza a travs de la invocacin del mtodo
addInterfaz(clase a gestionar el evento).
Estas clases deben implementar los interfaces que se correspondan con
cada tipo de evento e indicar las acciones a ejecutar en el caso que se
active el evento.
Los interfaces ms utilizados son los siguientes:
EventListener
MouseListener
MouseMotionListener
ActionListener
KeyLIstener
WindowListener
Componentes y sus Listeners
Eventos java.awt.event
Estas interfaces definen una serie de mtodos que se corresponden con
las diferentes acciones asociadas a un tipo de evento determinado.
Por ejemplo, en un evento de teclado, el usuario puede presionar o
soltar una tecla.
Por lo tanto, cuando definamos la clase implementando la interfaz
correspondiente, se tendrn que implementar todos los mtodos
definidos en l.
Existen tres posibilidades para definir una clase que gestione los
eventos de un componente:
Crear una nueva clase.
Utilizar la clase que define la ventana, como clase que adems
gestionar los eventos.
Definir una clase annima dentro de la clase de ventana
Eventos java.awt.event
Eventos java.awt.event
Si se desea obtener informacin del evento producido, se puede hacer
a travs del argumento de cada mtodo invocado.
Por ejemplo, si se desea saber la tecla que se ha pulsado sobre una
caja de texto, deberemos operar de la siguiente manera:
Aplicar un listener que gestione los eventos de tipo teclado sobre la
caja de texto: cajaTexto.addKeyListener(new A());
Implementar el interface KeyListener con todos sus mtodos.
Identificar el mtodo asociado al evento pulsar una tecla.
Trabajar con el objeto que recibe el mtodo en el argumento, ya que es
ste quin posee toda la informacin del evento producido
Jerarqua de Interfaces de Eventos

Jerarqua de Interfaces de Eventos
Clases que implementan los interfaces:
java.awt.event.KeyAdapter (implements KeyListener)
java.awt.event.MouseAdapter (implements MouseListener)
java.awt.event.MouseMotionAdapter (implements
MouseMotionListener)
java.awt.event.WindowAdapter (implements WindowListener)
La ventaja que nos proporcionan las clases del tipo
Adapter es que realizan la implementacin de todos los
mtodos de la interface. De esta manera, se puede
heredar de ella, y slo se redefinir el mtodo necesario.

Eventos de Ventana
Definidos en el interface WindowListener:
Mtodos:
public void windowClosed(WindowEvent event)
public void windowDeiconified(WindowEvent event)
public void windowIconified(WindowEvent event)
public void windowActivated(WindowEvent event)
public void windowDeactivated(WindowEvent event)
public void windowOpened(WindowEvent event)
public void windowClosing(WindowEvent event)

Ejemplo eventos de ventana (I)
Ejemplo de implementacin del interface.
class Ventana extends Frame implements WindowListener
{
Ventana()
{ ;
this.addWindowListener(this);
}
//Hay que implementar todos los mtodos
public void windowClosed(WindowEvent event) { }
public void windowDeiconified(WindowEvent event) { }
public void windowIconified(WindowEvent event) { }
public void windowActivated(WindowEvent event) { }
public void windowDeactivated(WindowEvent event) { }
public void windowOpened(WindowEvent event) { }
public void windowClosing(WindowEvent event)
{System.exit(0);}
}

Ejemplo eventos de ventana (II)
Ejemplo sin implementacin del interface, a travs de la utilizacin de una clase
annima interna.
Implementacin del interfaz a travs de WindowAdapter.
nicamente se implementa el mtodo deseado.
De esta manera, no es nuestra clase la que gestiona el evento, sino la clase
annima creada de dentro de ella.
class Ventana extends Frame
{
Ventana()
{
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{ System.exit(0); }
};
}
}
Eventos de Teclado
Implementar el interface KeyListener:
Mtodos:
public void keyTyped(KeyEvent e)
public void keyPressed(KeyEvent e)
public void keyReleased(KeyEvent e)

Eventos de Teclado Ejemplo
Ejemplo de implementacin del interface.
public class ClienteWindow extends Applet implements
KeyListener
{

textoMensaje.addKeyListener(this);

public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
public void keyPressed(KeyEvent e)
{
int code = e.getKeyCode();
if(KeyEvent.VK_ENTER == code)
{

}
}
}
Eventos sobre Components
Implementar el interface ActionListener:
Mtodos:
public void actionPerformed(ActionEvent
e)
Ejemplo de Eventos sobre componentes (I)
Ejemplo de implementacin del interface.
public class ClienteWindow extends Applet implements
ActionListener {

boton.addActionListener(this);

public void actionPerformed(ActionEvent event)
{
Object source = event.getSource();
if (source == boton)
{

}
}

Ejemplo de Eventos sobre componentes (II)
Ejemplo sin implementacin del interface, a travs de
la utilizacin de una clase annima.
boton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{

}
};
Eventos de Ratn
Implementar el interface MouseListener:
Mtodos:
public void mouseClicked(MouseEvent e)
public void mouseEntered(MouseEvent e)
public void mouseExited(MouseEvent e)
public void mousePressed(MouseEvent e)
public void mouseReleased(MouseEvent e
COMO CREAR USANDO
SWING
JLabel
Crear una etiqueta:

JLabel etiq=new JLabel("Nombre: ");
/* En la siguiente sentencia se asigna un color a la
etiqueta utilizando el constructor Color(R,G,B) */
etiq.setForeground(new Color(255,0,0)); //Rojo
etiq.setFont(new Font("Times New Roman",Font.BOLD,
12));

JButton
Crear un botn:

JButton botonSalir = new JButton("Aceptar");

Gestin de eventos:
botonSalir.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
dispose();
System.exit(0);
}
});

JText
Crear una caja de texto:
JTextField textNombre = new JTextField(10);

Gestin de eventos:
textNombre.addKeyListener(new KeyAdapter()
{
public void keyTyped(KeyEvent e)
{
if ((int)e.getKeyChar()== KeyEvent.VK_ENTER)
System.out.println(textNombre.getText());
}
});

JComboBox
Crear una lista combinada:
String datos[] = { Uno, Dos, Tres, Cuatro,
Cinco};
JComboBox lista = new JComboBox (datos);
lista.setBorder(BorderFactory.createLineBorder(Color
.red,
4));

Gestin de eventos:
lista.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println(lista.getSelectedItem());
}
});

JCheckBox
Crear una casilla de verificacin:
JCheckBox ch=new JCheckBox("Estudiante", new
ImageIcon("images/off.gif"), false);
ch.setRolloverSelectedIcon(new
ImageIcon("images/over.gif"));
ch.setRolloverIcon(new ImageIcon("images/over.gif"));
ch.setSelectedIcon(new ImageIcon("images/on.gif"));

Gestin de eventos:
ch.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(ch.isSelected())
mostrarMensaje("Check Activado");
}
});

JRadioButton
Crear una botn de opcin:
ButtonGroup grupo = new ButtonGroup();
rb1 = new JRadioButton("Hombre");
rb2 = new JRadioButton("Mujer");
rb1.setSelected(true);
rb1.setMnemonic(KeyEvent.VK_H);
rb2.setMnemonic(KeyEvent.VK_M);
grupo.add(rb1);
grupo.add(rb2);
Gestin de eventos:
rb1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(rb1.isSelected())
mostrarMensaje("Radio Hombre
Activado");
}
});

JOptionPane
Esta clase se utiliza para crear cualquier tipo de dialogo estndar
para mostrar o recoger informacin.
Relacin (Tipo de dilogo Mtodo esttico):
Dilogo de Confirmacin (Si/No/Cancelar) showConfirmDialog
Dilogo de Entrada - showInputDialog
Dilogo de Mensaje - showMessageDialog
Dialogo Personalizable - showOptionDialog
Ejemplo:
String nombre = JOptionPane.showInputDialog(this,
"<html>Introduzca su <u>nombre</u>, por favor:</html>");
JOptionPane.showMessageDialog(this, "<html><H3>Proceso
finalizado satisfactoriamente</H3></html>");
JFileChooser
Permite mostrar los dilogos de Abrir y Guardar
como...
Relacin (Tipo de dilogo Mtodo instancia):
Dilogo de Abrir showOpenDialog
Dilogo de Guardar como... showSaveDialog
Ejemplo:
JFileChooser j = new JFileChooser();
int rtn = j.showOpenDialog(this);
if (rtn == JFileChooser.APPROVE_OPTION)
System.out.println(j.getSelectedFile().getPath());

Look & Feel
Modifica la apariencia de nuestra ventana.
Tipos:

Ejemplo:
int i=1; //Apariencia Motif
UIManager.LookAndFeelInfo looks[];
looks = UIManager.getInstalledLookAndFeels();
try
{
UIManager.setLookAndFeel(looks[i].getClassName());
SwingUtilities.updateComponentTreeUI(this);
}
catch(Exception e) {}
Metal (0) Motif (1) Windows (2) Windows Classic (3)
Look & Feel
Tambin es posible pasar como parmetro el nombre de la clase del Look &
Feel:
Metal javax.swing.plaf.metal.MetalLookAndFeel
Motif com.sun.java.swing.plaf.motif.MotifLookAndFeel
Windows com.sun.java.swing.plaf.windows.WindowsLookAndFeel
Windows Classic
com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel

Ejemplo:
try
{
UIManager.setLookAndFeel
(com.sun.java.swing.plaf.windows.WindowsLookAndFeel);
SwingUtilities.updateComponentTreeUI(this);
}catch(Exception e) {}

Mens

Cada ventana puede tener su propia barra de mens.
AWT ofrece:
JMenuBar: para crear la barra de mens
JMenu: para los diferente mens de la barra
Elementos del men:
instancias de la clase JMenuItem para elementos normales.
instancias de la clase JCheckBoxMenuItem.
otros mens.
separadores, gracias al mtodo addSeparator().

You might also like