Programación Orientada A Eventos
Programación Orientada A 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
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
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
O bien
class Cajero
public static void main(String[] args) {
GUI_CtaBancaria unaCuenta = new GUI_CtaBancaria();
unaCuenta.setVisible(true);
}
}
Introduccin a la Programacin Orientada a Objetos
}
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.
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.
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
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
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
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
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
panelBotones
panelES
panelRetirar
panelEmpleado
Maquina Expendedora
botonCafe
botonRetirarInfusion
botonEmpleado
Maquina Expendedora
cartelSalida
cartelBebida
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
Maquina Expendedora
public GUI_R101()
Maquina Expendedora
private void initGUI() {
Maquina Expendedora
private void initGUI() {
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);
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);
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() {
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() {
Maquina Expendedora
private void initGUI() {
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 {
Maquina Expendedora
public class GUI_R101 extends JFrame {
Maquina Expendedora
public class GUI_R101 extends JFrame {
}
Introduccin a la Programacin Orientada a Objetos
Maquina Expendedora
Complete la implementacin con los botones que faltan
botonCafe
botonTe
botonCafeCarioca
Maquina Expendedora
Implemente una GUI para la mquina R101 Plus
botonCafe
botonTe
botonCafeCarioca
botonBahiano
Maquina Expendedora
botonCafe
panelBotones
cartelSalida
panelES
cartelBebida
panelRetirar
botonRetirarInfusion
panelEmpleado
botonCafeEmpleado
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;