0% encontró este documento útil (0 votos)
132 vistas56 páginas

Programación Orientada A Eventos

La construcción de una GUI utiliza un modelo de programación basado en eventos. En este modelo el orden en el cual se ejecutan las instrucciones de un programa va a quedar determinado por eventos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
132 vistas56 páginas

Programación Orientada A Eventos

La construcción de una GUI utiliza un modelo de programación basado en eventos. En este modelo el orden en el cual se ejecutan las instrucciones de un programa va a quedar determinado por eventos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 56

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 va a quedar
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.

Introduccin a la Programacin Orientada a Objetos

Programacin Basada en Eventos


Algunas componentes de una GUI van a ser
reactivas, es decir tienen la capacidad de reaccionar
ante las acciones del usuario.
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.
Introduccin a la Programacin Orientada a Objetos

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.

Introduccin a la Programacin Orientada a Objetos

Programacin Basada en Eventos

OBJETO
EVENTO

dispara un
evento
interno

OBJETO
FUENTE

detecta el
evento
externo

registrado

El objeto oyente
recibe un mensaje
con el objeto evento
como parmetro

OBJETO
OYENTE

Introduccin a la Programacin Orientada a Objetos

Interfaces Grficas
La construccin de una GUI va a requerir
Definir clases que deriven de las clases grficas
provistas por Java.
Definir clases que implementen
grficas provistas por Java.

interfaces

Crear objetos de las clases provistas o de las


clases que derivadas o implementadas
Elegir un organizador de layout y especificar la
apariencia de las componentes.
Insertar las componentes en los contenedores
Introduccin a la Programacin Orientada a Objetos

Interfaces Grficas
La estructura de las GUI que hemos estamos
definiendo consta entonces 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 internas que implementan interfaces y
permiten crear oyentes
Introduccin a la Programacin Orientada a Objetos

Interfaces Grficas
Un constructor incluye instrucciones para:
crear objetos ligados a componentes grficas
crear objetos oyente para las componente
grficas que sean objetos fuente de eventos y
registrarlos
establecer el diagramado y los atributos de las
componentes
insertar las componentes en los contenedores
Algunas de estas instrucciones pueden ser provistas
por un mtodo interno a la clase para favorecer la
modularizacin de la clase.
Introduccin a la Programacin Orientada a Objetos

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.
Introduccin a la Programacin Orientada a Objetos

Caso de Estudio: Cuenta Bancaria


El usuario opera con su cuenta bancaria a travs
de una interfaz grfica como la que sigue

Introduccin a la Programacin Orientada a Objetos

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...

Introduccin a la Programacin Orientada a Objetos

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...

Introduccin a la Programacin Orientada a Objetos

Caso de Estudio: Cuenta Bancaria


Si el usuario presiona el botn Consultar Saldos en
pantalla aparece un

O bien

Introduccin a la Programacin Orientada a Objetos

Caso de Estudio: Cuenta Bancaria

class Cajero
public static void main(String[] args) {
GUI_CtaBancaria unaCuenta = new GUI_CtaBancaria();
unaCuenta.setVisible(true);
}
}
Introduccin a la Programacin Orientada a Objetos

Caso de Estudio: Cuenta Bancaria


import
public class GUI_CtaBancaria extends JFrame {
private CuentaBancaria cuenta;
private Container contenedor;
private JPanel panelAcciones, panelSaldo;
private JButton botonConsultar,
botonExt, botonDep;
public GUI_CtaBancaria() {

}
Introduccin a la Programacin Orientada a Objetos

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 tres botones
Establecer la apariencia de los botones
Crear los tres oyentes
Registrar cada oyente a su botn
Establecer la apariencia de los paneles
Insertar los botones a los paneles
correspondientes
Insertar los paneles al panel de contenido
Introduccin a la Programacin Orientada a Objetos

Caso de Estudio: Cuenta Bancaria


public GUI_CtaBancaria() {
cuenta = new CuentaBancaria(3);
contenedor = getContentPane();
panelAcciones = new JPanel();
panelSaldo = new JPanel();
botonDep = new JButton();
botonExt = new JButton();
botonConsultar = new JButton();
setSize(210, 210);
setDefaultCloseOperation(EXIT_ON_CLOSE);
armarGUI();

Introduccin a la Programacin Orientada a Objetos

Caso de Estudio: Cuenta Bancaria


public void armarGUI() {
//Apariencia de los botones
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));
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));
botonConsultar.setText("Consultar Saldo");
botonConsultar.setPreferredSize(new Dimension(136, 30));
botonConsultar.setSize(150, 30);
botonConsultar.setBorder
(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
Introduccin a la Programacin Orientada a Objetos
}

Caso de Estudio: Cuenta Bancaria


public void armarGUI() {
//Crear oyentes
OyenteDepositar oDepositar=new OyenteDepositar();
OyenteExtraer oExtraer = new OyenteExtraer();
OyenteConsultar oConsultar =new OyenteConsultar();
// Registrar oyentes
botonDep.addActionListener(oDepositar);
botonExt.addActionListener(oExtraer);
botonConsultar.addActionListener(oConsultar);
}

Introduccin a la Programacin Orientada a Objetos

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);

Introduccin a la Programacin Orientada a Objetos

Caso de Estudio: Cuenta Bancaria


public void armarGUI() {

// Insertar botones a los paneles


panelAcciones.add(botonDep);
panelAcciones.add(botonExt);
panelSaldo.add(botonConsultar);
// Insertar los paneles al contenedor
contenedor.add(panelAcciones, BorderLayout.NORTH);
contenedor.add(panelSaldo, BorderLayout.SOUTH);
}

Introduccin a la Programacin Orientada a Objetos

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);
}
}
}

Introduccin a la Programacin Orientada a Objetos

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" );
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,
Introduccin a la Programacin Orientada a Objetos
"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 );
}
}

Introduccin a la Programacin Orientada a Objetos

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.

Introduccin a la Programacin Orientada a Objetos

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.

Introduccin a la Programacin Orientada a Objetos

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.

Introduccin a la Programacin Orientada a Objetos

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.
Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
Cada vez que se solicita una infusin se reducen
los ingredientes de acuerdo a la siguiente tabla:

Caf
Caf
Leche

40

Caf con
leche

Submarino T con
leche

30
20

30
50

T
Cacao
Crema

caf carioca

20
20

40

10
30

En el caso de la preparacin de una taza de t, la


mquina M111 utiliza 10 grs y la mquina R101 15 grs.
Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
MaquinaExpendedora
<<atributos de instancia>>
caf
t
cacao
<<comandos>>
cafe()
<<consultas>>
obtenerCafe() : entero

M111

R101

<<atributos de instancia>>
leche
<<comandos>>
teConLeche()
submarino()
<<consultas>>
obtenerLeche() : entero

<<atributos de instancia>>
crema
<<comandos>>
carioca ()
<<consultas>>
obtenerCrema(): entero

Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
Comenzaremos implementando parcialmente una GUI para
una mquina expendedora del modelo R101
Inialmente est activo el botn para
preparar caf y uno para el
Empleado que permite cargar
ingredientes

Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
Si se oprime el botn Caf aparece un cartel informativo y
el nico botn activo es el que debe seleccionarse al retirar
el vaso

Introduccin a la Programacin Orientada a Objetos

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.

Introduccin a la Programacin Orientada a Objetos

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

Al oprimir Aceptar vuelve a aparecer la pantalla inicial.

Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora

panelBotones

panelES
panelRetirar
panelEmpleado

Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
botonCafe

botonRetirarInfusion
botonEmpleado

Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora

cartelSalida

cartelBebida

Introduccin a la Programacin Orientada a Objetos

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;

}
Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
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

Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
public GUI_R101()

unaMaquina = new R101();


// Declaracin de objetos grficos
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();
}
Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
private void initGUI() {

BoxLayout esteLayout = new


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

Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
private void initGUI() {

//Boton y oyente del caf


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

Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
private void initGUI() {
//Boton y oyente retirar
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.LOWER
ED));
botonRetirarInfusion.setPreferredSize
(new Dimension(360, 32));
botonRetirarInfusion.addActionListener(oRetirar);

Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
private void initGUI() {
//Boton y oyente Empleado
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);

Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
private void initGUI() {
//Diagramado del Panel de Botones
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));

}
Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
private void initGUI() {

//Diagramado del Panel de ES


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

Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
private void initGUI() {

// Apariencia carteles
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));
}
Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
private void initGUI() {

// Diagramado Paneles Retirar y Empleado


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

panelEmpleado.setPreferredSize(new Dimension(392, 64));


panelEmpleado.setBackground(new Color(235,235,235));

Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
private void initGUI() {

//Insertar botones, carteles y paneles


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);
}

Introduccin a la Programacin Orientada a Objetos

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);
}
}
Introduccin a la Programacin Orientada a Objetos

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();
}
}

Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
public class GUI_R101 extends JFrame {

class OyenteRetirar implements ActionListener{


public void
actionPerformed(ActionEvent evt) {
cartelSalida.setText("");
cartelBebida.setText("");
habilitarBotones();
}
}

Introduccin a la Programacin Orientada a Objetos

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);
}
}

}
Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
Complete la implementacin con los botones que faltan
botonCafe
botonTe
botonCafeCarioca

Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
Implemente una GUI para la mquina R101 Plus
botonCafe
botonTe
botonCafeCarioca
botonBahiano

Introduccin a la Programacin Orientada a Objetos

Maquina Expendedora
botonCafe

panelBotones

cartelSalida
panelES

cartelBebida

panelRetirar

botonRetirarInfusion

panelEmpleado

botonCafeEmpleado

La GUI incluye diferentes tipos de componentes pero en


este caso slo los botones son reactivos.
Introduccin a la Programacin Orientada a Objetos

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;

Introduccin a la Programacin Orientada a Objetos

También podría gustarte