Anda di halaman 1dari 10

Introducción a la Programación Orientada a Objetos

TEMARIO
INTRODUCCIÓN A LA
PROGRAMACIÓN ORIENTADA
• Repaso.
A OBJETOS • Construcción de una GUI.
01100 • Paquetes gráficos. 01100
GUI 10011 10011
10110 • Ventanas y frames. 10110
Botones y oyentes 01110
01100 • Organizador de diagramado.
01110
01100
10011 10011
10110 • Paneles. 10110
Dr. Luciano H. Tamargo 01110 01110
http://cs.uns.edu.ar/~lt 1001 • Botones. 1001
Depto. de Ciencias e Ingeniería de la Computación 1 11 1 11
Universidad Nacional del Sur, Bahía Blanca 0 0 • Caso de estudio: Elegir bebida. 0 0
2018 1 1
2

REPASO REPASO

• Una interface gráfica de usuario (GUI) es un medio • La construcción de una GUI está fuertemente
que permite que una persona se comunique y controle relacionada con los conceptos de:
un sistema a través de ventanas, botones, menúes, etc. – Encapsulamiento
• Una GUI se construye a partir de una colección de – Herencia
01100 01100
componentes con una representación gráfica y 10011 – Polimorfismo 10011
capacidad para percibir eventos generados por las 10110
• Y con los criterios de: 10110
acciones del usuario. 01110 01110
01100 – Reusabilidad 01100
10011 10011
10110 – Extensibilidad 10110
01110 01110
1001 1001
1 11 1 11
0 0 0 0
1 1
3 4

TEMARIO CONSTRUCCIÓN DE UNA GUI

• Repaso.
• Construcción de una GUI. • Diseñar la interfaz de acuerdo a las especificaciones.

• Paquetes gráficos. 01100 01100


10011 • Implementar la interfaz usando las facilidades 10011
• Ventanas y frames. 10110
provistas por el lenguaje. 10110
01110 01110
• Organizador de diagramado. 01100 01100
10011 10011
• Paneles. 10110 10110
01110 01110
• Botones. 1001 1001
1 11 1 11
• Caso de estudio: Elegir bebida. 0 0 0 0
1 1
5 6

Profesor Luciano H. Tamargo 1


Introducción a la Programación Orientada a Objetos

IMPLEMENTACIÓN DE UNA
DISEÑO DE UNA GUI
GUI

• Definir las componentes. • Crear un objeto gráfico para cada componente de la


• Definir el diagramado de las componentes GUI e insertarlo en otras componentes contenedoras.
contenedoras. • Establecer los valores de los atributos de los objetos
• Decidir cómo reacciona cada componente ante las gráficos.
01100 01100
acciones realizadas por el usuario. 10011
• Definir el comportamiento de las componentes 10011
10110 reactivas en respuesta a las acciones del usuario. 10110
01110 01110
01100 01100
• En esta materia no vamos a diseñar GUIs, solo
10011 10011
implementar de acuerdo a un diseño dado. 10110 10110
• En el laboratorio (optativo y obligatorio) vamos a 01110 01110
completar implementaciones parciales, de acuerdo 1a0 0 1 1001
1 11 1 11
las consignas establecidas en el enunciado. 0 0 0 0
1 1
7 8

OBJETOS GRÁFICOS Y TEMARIO


CLASES GRÁFICAS

• Un objeto gráfico es una instancia de una clase gráfica.


• Una clase gráfica define algunos atributos gráficos y • Repaso.
brinda servicios gráficos.
• Construcción de una GUI.
• Una clase gráfica puede usarse para:
– Crear objetos gráficos asociados a las componentes
01100 • Paquetes gráficos. 01100
10011 10011
de la interfaz. 10110 • Ventanas y frames. 10110
01110 01110
– Definir clases más específicas a partir de las cuales
01100 • Organizador de diagramado. 01100
se crearán componentes. 10011 10011
10110 • Paneles. 10110
01110 01110
1001 • Botones. 1001
1 11 1 11
0 0 • Caso de estudio: Elegir bebida. 0 0
1 1
9 10

PAQUETES GRÁFICOS PAQUETES GRÁFICOS

• Usaremos clases gráficas provistas por los paquetes


AWT (Abstract Window Toolkit) o Swing o alguna
derivada de una de ellas.
• AWT y Swing son entonces paquetes que facilitan la
01100 01100
construcción de interfaces gráficas. 10011 10011
• Ambos brindan una colección de clases que permiten 10 01 11 11 00 10110
01110
crear botones, cajas de texto, menúes, etc. 01100 01100
10011 10011
• Una de las ventajas de Swing sobre AWT es que permite 10110 10110
desarrollar aplicaciones con una apariencia similar a la0 1 1 1 0 01110
de la plataforma subyacente con muy poco esfuerzo. 1 0 0 1 1001
1 11 1 11
• Swing no reemplaza a AWT sino que lo usa y agrega 0 0 • En esta jerarquía la relación entre una clase derivada
0 0
y1
1
nuevas clases. una clase base no siempre es de tipo is-a.
11 12

Profesor Luciano H. Tamargo 2


Introducción a la Programación Orientada a Objetos

EL PAQUETE SWING TEMARIO


La clase JFrame

javax.swing
java.lang.Object • Repaso.
java.awt.Component
java.awt.Container • Construcción de una GUI.
java.awt.Window 01100 • Paquetes gráficos. 01100
java.awt.Frame 10011 10011

javax.swing.JFrame
10110 • Ventanas y frames. 10110
01110 01110
01100 • Organizador de diagramado. 01100
10011 10011
• La clase Frame agrega a la clase Window el marco, la1 0 1 1 0 • Paneles. 10110
línea de título y los botones 01110 01110
1001 • Botones. 1001
• La clase JFrame agrega a Frame el panel de contenido1 11 1 11
donde se insertan las componentes. 0 0 • Caso de estudio: Elegir bebida. 0 0
1 1
13 14

VENTANAS Y FRAMES VENTANAS Y FRAMES

• Un frame es un tipo especial de ventana sobre el que se


ejecuta una aplicación.
• Toda instancia de JFrame tiene atributos marco, barra
de título, algunos botones y un panel de contenido. import java.awt.*;
class UnaVentana{
01100 01100
10011 public static void main(String args[]){ 10011
10110 MiVentanaColor f = new 10110
01110 01110
MiVentanaColor(“Una ventana”,Color.BLUE);
01100 01100
10011 f.setVisible(true); 10011
10110 } 10110
01110 } 01110
1001 1001
1 11 1 11
0 0 0 0
1 1
• La clase JFrame brinda servicios para modificar los
valores de los atributos. 15 16

VENTANAS Y FRAMES VENTANAS Y FRAMES


import java.awt.*;
import javax.swing.*; • Invoca al constructor de JFrame con el texto para la
class MiVentanaColor extends JFrame{ barra de título.
JLabel etiqueta; • Establece el tamaño del frame.
public MiVentanaColor(String titulo, Color col){ • Establece el color del panel de contenido del frame.
super(titulo); 01100 01100
10011 • Crea una etiqueta estableciendo su texto. 10011
setSize(400,300); 10110
getContentPane().setBackground(col); 01110
• Recupera el panel de contenido del frame e inserta en10 01 11 11 00
01100
etiqueta = new JLabel("Panel de contenido"); su interior la etiqueta. 01100
10011 • Determina que la aplicación termine cuando el usuario1 0 0 1 1
getContentPane().add(etiqueta); 10110 10110
setDefaultCloseOperation(EXIT_ON_CLOSE);0 1 1 1 0 cierre la ventana. 01110
} 1001 1001
1 11 1 11
} 0 0 0 0
1 1
La clase MiVentanaColor hereda los atributos y
servicios provistos por la clase JFrame. 17 18

Profesor Luciano H. Tamargo 3


Introducción a la Programación Orientada a Objetos

VENTANAS Y FRAMES VENTANAS Y FRAMES

import java.awt.*; • La GUI tiene varias componentes gráficas, cada una


class DosVentanas { asociada a un objeto gráfico.
public static void main(String args[ ]) { • En la definición de la clase MiVentanaColor se crea
una etiqueta y se referencia al panel de contenido.
MiVentanaColor f1= new 01100 01100
10011
• La etiqueta es un atributo declarado en la clase 10011
MiVentanaColor(“Una ventana”, Color.BLUE); MiVentanaColor, el panel de contenido es un atributo
10110 10110
f1.setVisible(true); 01110 heredado de JFrame o una clase ancestro de JFrame.0 1 1 1 0
01100 01100
MiVentanaColor f2= new 10011 • Ambos objetos son pasivos, no reaccionan ante las 1 0 0 1 1
10110
MiVentanaColor(“Otra ventana”, Color.RED); acciones del usuario. 10110
01110 01110
f2.setVisible(true); 1001 1001
} 1 11 1 11
0 0 0 0
} 1 1
19 20

VENTANAS Y FRAMES TEMARIO

• La GUI incluye objetos reactivos, su comportamiento


está establecido por las clases provistas por Swing y • Repaso.
AWT.
• Por ejemplo, la barra de título cuando arrastramos el • Construcción de una GUI.
01100
mouse o los botones para minimizar, maximizar y cerrar. • Paquetes gráficos. 01100
10011 10011
10110 • Ventanas y frames. 10110
01110 01110
01100 • Organizador de diagramado. 01100
10011 10011
10110 • Paneles. 10110
01110 01110
1001 • Botones. 1001
1 11 1 11
0 0 • Caso de estudio: Elegir bebida. 0 0
1 1
21 22

ORGANIZADOR DE ORGANIZADOR DE
DIAGRAMADO DIAGRAMADO

• El organizador de diagramado es un atributo de todos • FlowLayout: Distribuye los componentes uno al lado
los objetos gráficos contenedores que determina como del otro comenzando en la parte superior.
se distribuyen las componentes contenidas. • BorderLayout: Divide el contenedor en cinco
• Algunas de las clases provistas para crear regiones: NORTH, SOUTH, EAST, WEST y CENTER,
01100 admite un único componente por región. 01100
organizadores son BorderLayout, FlowLayout, 10011 10011
GridLayout. 10110 • GridLayout: Divide el contenedor en una grilla de n1 0 1 1 0
01110 filas por m columnas, con todas las celdas de igual 01110
• En la clase práctica y en la clase de laboratorio 01100 01100
tamaño.
trabajarán con distintos diagramados. 10011 10011
10110 10110
• En el parcial no van a tener que establecer el 01110 01110
diagramado, solo reconocer las instrucciones que 1001 1001
1 11 1 11
organizan a los objetos contenedores. 0 0 0 0
1 1
23 24

Profesor Luciano H. Tamargo 4


Introducción a la Programación Orientada a Objetos

TEMARIO PANELES

• Un panel es un área sobre la que trabaja el usuario o se


• Repaso. colocan otras componentes.
• Construcción de una GUI. • Nosotros solo usaremos paneles como contenedores de
otros paneles u otro tipo de componentes.
• Paquetes gráficos. 01100 01100
10011 • Para definir un panel creamos un objeto de la clase
10011
• Ventanas y frames. 10110
JPanel.
10110
01110 01110
• Organizador de diagramado. 01100 • El principal atributo de un panel es el organizador de 0 1 1 0 0
10011 10011
• Paneles. 10110 diagramado que permite especificar como se 10110
01110 distribuyen las componentes en su interior. 01110
• Botones. 1001 1001
1 11 1 11
• Caso de estudio: Elegir bebida. 0 0 0 0
1 1
25 26

PANELES TEMARIO

• Los paneles van a quedar organizados de manera


jerárquica. • Repaso.
• Esto es, el panel de contenido contiene paneles que a • Construcción de una GUI.
su vez pueden contener a otros paneles.
01100 • Paquetes gráficos. 01100
• El panel de contenido va a tener su organizador 1de0011 10011
10110
diagramado y para cada uno de los paneles en que 0se • Ventanas y frames. 10110
1110 01110
divide podemos establecer también un organizador 0de
1100 • Organizador de diagramado. 01100
10011 10011
diagramado. 10110 • Paneles. 10110
• La distribución de componentes en paneles facilita 0el
1110
• Botones.
01110
1001 1001
diseño de GUI. 1 11 1 11
0 0 • Caso de estudio: Elegir bebida. 0 0
1 1
27 28

BOTONES BOTONES

• Un botón es una componente reactiva, puede percibir • Desarrolle una aplicación que permita establecer el color
la acción del usuario y reaccionar de acuerdo al de fondo de una ventana. El color será rojo o verde de
comportamiento establecido por un objeto oyente. acuerdo al botón que se apriete.
• Algunos de los atributos son texto, imagen, alineación • La ventana inicialmente debe aparecer así:
del texto y de la imagen, color, borde, letra 01100 01100
10011 10011
mnemónica y forma, además, puede estar habilitado 1o0 1 1 0 10110
no. 01110 01110
01100 01100
10011 10011
10110 • Éste es el aspecto cuando se aprieta rojo o verde: 10110
01110 01110
1001 1001
1 11 1 11
0 0 0 0
1 1
29 30

Profesor Luciano H. Tamargo 5


Introducción a la Programación Orientada a Objetos

//importar paquetes
…BOTONES BOTONES
class GuiFondoRojoVerde extends JFrame {
/*Declarar los BOTONES*/
… //importar paquetes
public GuiFondoRojoVerde (){ import java.awt.*;
/*Establecer los valores de los atributos del frame*/ import java.awt.event.*;
… import javax.swing.*;
/*Crear los BOTONES*/ 01100 … 01100
… 10011 10011
10110 10110
/*Crear y registrar los oyentes para los BOTONES*/
01110 • Java brinda muchas facilidades a través de paquetes. 0 1 1 1 0
… 01100 01100
/*Insertar los BOTONES en el panel de contenido*/1 0 0 1 1 • El programador importa solo los paquetes que necesita.1 0 0 1 1
… 10110 10110
} 01110 • El tamaño del código que se genera al compilar depende 01110
1001 1001
solo de las facilidades básicas y los paquetes importados.
/*definir clases para establecer el comportamiento 1 11
de 1 11
los BOTONES*/ 0 0 0 0
… La estructura del código1 1
} favorece la legibilidad 31 32

BOTONES BOTONES

//importar paquetes //importar paquetes


… …
class GuiFondoRojoVerde extends JFrame { class GuiFondoRojoVerde extends JFrame {
/*Declarar los botones*/
… 01100 private JButton botonRojo, botonVerde; 01100
} 10011 … 10011
10110 10110
01110 } 01110
• Un objeto de clase GuiFondoRojoVerde es también
01100 01100
una instancia de JFrame. 10011 10011
10110 • Los atributos de instancia de la clase
10110
• Como todo frame un objeto de clase
01110 GuiFondoRojoVerde son dos variables de la 01110
clase
GuiFondoRojoVerde tiene como atributos el borde,1 la
001
JButton provista por Swing.
1001
1 11 1 11
barra de título y un panel de contenido. 0 0 0 0
1 1
33 34

BOTONES BOTONES

public GuiFondoRojoVerde (){ public GuiFondoRojoVerde (){


/*Declarar los botones*/ /*Declarar los botones*/
… …
/*Establecer los valores de los atributos*/ /*Establecer los valores de los atributos*/
setLayout(new FlowLayout()); 01100 … 01100
setSize(200, 120); 10011 /*Crear los botones*/ 10011
10110 10110
setDefaultCloseOperation(EXIT_ON_CLOSE); 0 1 1 1 0 botonRojo = new JButton("Rojo"); 01110
… 01100 botonVerde = new JButton("Verde"); 01100
} 10011 10011
10110 10110
01110 01110
• La clase JFrame brinda servicios que permiten
1001
• Por cada atributo de instancia que corresponde a una
1001
establecer los valores de los atributos del frame, por
1 11 componente gráfica de la GUI, creamos un objeto
1 11
ejemplo el diagramado y el tamaño. 0 0 gráfico. 0 0
1 1
35 36

Profesor Luciano H. Tamargo 6


Introducción a la Programación Orientada a Objetos

BOTONES BOTONES

public GuiFondoRojoVerde (){ public GuiFondoRojoVerde (){


… …
/*Crear los botones*/ /*Crear los botones*/
botonRojo = new JButton("Rojo"); botonRojo = new JButton("Rojo");
botonVerde = new JButton("Verde"); 01100 botonVerde = new JButton("Verde"); 01100
/*Crear y registrar los oyentes para los 10011 /*Crear y registrar los oyentes para los 10011
10110 10110
botones*/ 01110 botones*/ 01110
OyenteBotonR ponerRojo = new OyenteBotonR();
01100 OyenteBotonR ponerRojo = new OyenteBotonR();
01100
botonRojo.addActionListener(ponerRojo); 1 0 0 1 1 botonRojo.addActionListener(ponerRojo); 1 0 0 1 1
10110 10110
01110 OyenteBotonV ponerVerde =new OyenteBotonV();
01110
• Para que un botón sea reactivo debe registrarse a 1un
001 botonVerde.addActionListener(ponerVerde); 1 0 0 1
objeto oyente. 1 11 1 11
0 0 0 0
• El programador implementa cada clase de un oyente 1de 1
acuerdo al comportamiento que debe exhibir el botón. 37 38

BOTONES BOTONES

public GuiFondoRojoVerde (){ /*definir clases para establecer el comportamiento


… de los botones */
/*Insertar los botones en el panel de contenido*/ class OyenteBotonR implements ActionListener {
getContentPane().add(botonRojo); public void actionPerformed (ActionEvent event){
getContentPane().add(botonVerde); 01100
getContentPane().setBackground(Color.red); 0 1 1 0 0
} 10011 } 10011
10110 } 10110
01110 01110
01100 01100
10011
• Para que un botón reaccione ante una acción del usuario,
10011
10110 debe estar registrado a una clase que implemente 1a0 la
110
• Para que los botones sean visibles deben insertarse en0 un
1110 01110
interface ActionListener.
contenedor, en este caso el panel de contenido del frame.
1001 1001
1 11 • Implementar una interface implica definir sus métodos.
1 11
0 0 0 0
1 • En este caso el método actionPerformed que recibe
1
39 como parámetro un objeto de clase ActionEvent. 40

BOTONES BOTONES

/* definir clases para establecer el import java.awt.*;


comportamiento de los botones */ class FondoBotones {
class OyenteBotonR implements ActionListener { public static void main(String args[ ]) {
public void actionPerformed(ActionEvent event){
getContentPane().setBackground(Color.red); GuiFondoRojoVerde f = new GuiFondoRojoVerde();
} 01100 01100
10011 f.setVisible(true); 10011
} 10110 10110
class OyenteBotonV implements ActionListener { 0 1 1 1 0 } 01110
public void actionPerformed(ActionEvent event){
01100 } 01100
10011
getContentPane().setBackground(Color.green); 10011
10110 10110
}
01110 01110
} 1001 1001
} 1 11 1 11
0 0 0 0
1
• En este ejemplo, cada oyente modifica el color del panel 1

de contenido de acuerdo al botón que el usuario oprime.41 42

Profesor Luciano H. Tamargo 7


Introducción a la Programación Orientada a Objetos

//importar paquetes
BOTONES …
class GuiPanelRojoVerde extends JFrame {
/*Declarar los botones y los paneles */
• Desarrolle una aplicación que permita establecer el color …
public GuiPanelRojoVerde (){
de un panel. El color será rojo o verde de acuerdo al
/*Establecer los valores de los atributos */
botón que se apriete. …
• Por ejemplo, cuando se oprima el botón verde la /*Crear los botones y los paneles*/
01100
ventana debe aparecer: 10011

10110 /*Crear y registrar los oyentes para los
01110 botones*/
01100 …
10011 /*Insertar los botones en el panel de botones y
10110
01110 los paneles en el panel de contenido*/
1001 …
1 11 }
0 0 /*definir clases para los oyentes*/
1

43 } 44

BOTONES BOTONES

//importar paquetes public GuiPanelRojoVerde (){


… /*Establecer los valores de los atributos */
class GuiPanelRojoVerde extends JFrame { …
/*Declarar los botones y los paneles*/ /*Crear los botones y los paneles*/
private JButton botonRojo, botonVerde; 01100 botonRojo = new JButton("Rojo"); 01100
private JPanel panelColor, panelBotones; 10011 botonVerde = new JButton("Verde"); 10011
10110 10110
… 01110 panelColor= new JPanel(); 01110
} 01100 panelBotones = new JPanel(); 01100
10011 … 10011
10110 10110
01110 } 01110
• Los atributos de GuiPanelRojoVerde son dos
1001 1001
botones y dos paneles. 1 11 • El orden de estas cuatro instrucciones es irrelevante 1en1 1
0 0 0 0
1
ejecución , pero afecta la legibilidad del código. 1
45 46

BOTONES BOTONES
/*definir clases para los oyentes*/
public GuiPanelRojoVerde (){ class OyenteBotonR implements ActionListener {
… public void actionPerformed(ActionEvent event){
/*Insertar los botones en el panel de panelColor.setBackground(Color.red);
botones y los paneles en el panel de }
contenido*/ 01100 } 01100
panelBotones.add(botonRojo); 10011 class OyenteBotonV implements ActionListener 1{0 0 1 1
10110 10110
public void actionPerformed(ActionEvent event){
panelBotones.add(botonVerde); 01110 01110
getContentPane().add(panelBotones); 01100 panelColor.setBackground(Color.green); 0 1 1 0 0
getContentPane().add(panelColor); 10011 } 10011
10110 } 10110
01110 01110
• El orden de estas instrucciones influye en la apariencia
1001 1001
• La clase de cada oyente es interna a la clase 1 que
de la GUI, si se invierten las dos últimas, cambia1 la1 1 11
0 0 especializa a JFrame y por lo tanto tiene acceso a0 los
0
distribución de los paneles, dado que por omisión 1se atributos de instancia de GuiPanelRojoVerde,1 en
establece el diagramado FlowLayout. 47 particular a panelColor. 48

Profesor Luciano H. Tamargo 8


Introducción a la Programación Orientada a Objetos

TEMARIO CASO DE ESTUDIO: ELEGIR


BEBIDA

• Implementar una GUI que incluya dos paneles.


• Repaso. • El panel a la izquierda muestra una etiqueta con la
imagen de una bebida.
• Construcción de una GUI.
• El panel a la derecha ofrece dos botones que permiten
• Paquetes gráficos. 01100
seleccionar la bebida.
01100
10011 10011
• Ventanas y frames. 10110 10110
01110 01110
• Organizador de diagramado. 01100 01100
10011 10011
• Paneles. 10110 10110
01110 01110
• Botones. 1001 1001
1 11 1 11
• Caso de estudio: Elegir bebida. 0 0 0 0
1 1
49 50

CASO DE ESTUDIO: ELEGIR CASO DE ESTUDIO: ELEGIR


BEBIDA BEBIDA

• Las componentes de la GUI van a ser: • La estructura de la GUI puede ser:


- Dos paneles JPanel //importar paquetes
class GUI_R101{
- Una etiqueta JLabel
//atributos de instancia para las componentes gráfica
- Dos botones JButton 01100 public GUI_R101{ 01100
10011 //Establecer los atributos del frame 10011
10110 //Crear los botones y la etiqueta 10110
01110 01110
01100
//Crear y diagramar el panel con la etiqueta 0 1 1 0 0
10011 //Crear y diagramar el panel con los botones 1 0 0 1 1
10110 //Crear los objetos oyente y registrarlos a los1 0 1 1 0
01110 botones 01110
1001 1001
//Insertar los paneles en el panel de contenidos
1 11 1 11
0 0 } 0 0
1 //Clases de los oyentes 1
51
} 52

CASO DE ESTUDIO: ELEGIR CASO DE ESTUDIO: ELEGIR


BEBIDA BEBIDA

• La estructura de la GUI puede ser: //Importar paquetes


//importar paquetes import java.awt.*;
class GUI_R101{ import java.awt.event.*;
//atributos de instancia para las componentes gráfica import javax.swing.*;
public GUI_R101{ import javax.swing.border.*;
01100 01100
//Establecer los atributos del frame 10011 class GUI_R101 extends JFrame { 10011
//Botones, etiqueta y paneles 10110 //Atributos de Instancia 10110
armarPanelEtiqueta();
01110 private JLabel etiqueta; 01110
01100 private JButton BotonCafe, botonCarioca; 01100
armarPanelControl(); 10011 10011
//Insertar los paneles en el panel de contenidos
10110
private JPanel panelControl, panelImagen; 10110
} 01110 01110
1001 1001
//Clases de los oyentes • Todos los atributos de instancia de esta GUI
1 11 1 11
} 0 0 corresponden a componentes gráficas. 0 0
1 1
53 54

Profesor Luciano H. Tamargo 9


Introducción a la Programación Orientada a Objetos

CASO DE ESTUDIO: ELEGIR CASO DE ESTUDIO: ELEGIR


BEBIDA BEBIDA

public GUI_R101 () { private void armaPanelEtiqueta(){


//Establece los valores de los atributos del frame panelImagen = new JPanel();
setSize(600, 600); etiqueta = new JLabel();
setLayout(new FlowLayout()); etiqueta.setIcon(new ImageIcon("vacio.gif"));
setDefaultCloseOperation(EXIT_ON_CLOSE); panelImagen.add(etiqueta);
01100 01100
//Arma los paneles 10011 getContentPane().add(panelImagen); 10011
armaPanelEtiqueta(); 10110 } 10110
armaPanelControl(); 01110 01110
} 01100 01100
10011 • Crea un panel como un objeto de clase JPanel 10011
10110 • Crea una etiqueta como un objeto de clase JLabel 10110
01110 01110
1001 • Inserta la etiqueta en el panel 1001
• Modulamos la solución para favorecer la legibilidad. 1 11 1 11
0 0 • Inserta el panel en el panel de contenido 0 0
1 1
55 56

CASO DE ESTUDIO: ELEGIR CASO DE ESTUDIO: ELEGIR


BEBIDA BEBIDA

private void armaPanelControl(){ private void armaPanelControl(){


panelControl = new JPanel(); panelControl = new JPanel();
BotonCafe = new JButton("Cafe"); BotonCafe = new JButton("Cafe");
OyenteBotonCafe oyenteCafe = new OyenteBotonCafe(); OyenteBotonCafe oyenteCafe = new OyenteBotonCafe();
BotonCafe.addActionListener(oyenteCafe); BotonCafe.addActionListener(oyenteCafe);
01100 01100
panelControl.add(BotonCafe); 10011 panelControl.add(BotonCafe); 10011
} 10110 botonCarioca = new JButton("Carioca"); 10110
01110 OyenteBotonCarioca oyenteCarioca = new 01110
• Crea el panel como un objeto de clase JPanel 01100 01100
OyenteBotonCarioca();
10011 10011
• Crea un botón como un objeto de clase JButton 10110
botonCarioca.addActionListener(oyenteCarioca); 1 0 1 1 0
• Crea un objeto oyente de clase OyenteBotonCafe 01110 panelControl.add(botonCarioca); 01110
1001 getContentPane().add(panelControl); 1001
• Registra el objeto oyente al botón 1 11 } 1 11
0 0 0 0
• Inserta el botón en el panel 1 1
57 58

CASO DE ESTUDIO: ELEGIR CASO DE ESTUDIO: ELEGIR


BEBIDA BEBIDA

private class OyenteBotonCafe implements private class OyenteBotonCafe implements


ActionListener{ ActionListener{
public void actionPerformed(ActionEvent e){ public void actionPerformed(ActionEvent e){
etiqueta.setIcon(new ImageIcon("Cafe.gif")); etiqueta.setIcon(new ImageIcon("Cafe.gif"));
} }
01100 01100
} 10011 } 10011
10110 10110
OyenteBotonCafe oyenteCafe = new OyenteBotonCafe();
01110 private class OyenteBotonCarioca implements 01110
BotonCafe.addActionListener(oyenteCafe); 01100 ActionListener{
01100
10011 public void actionPerformed(ActionEvent e) { 1 0 0 1 1
10110 10110
etiqueta.setIcon(new ImageIcon("Carioca.gif"));
01110 01110
• La clase del objeto oyente es interna a la clase GUI_R101 e1 0 0 1 } 1001
1 11 } 1 11
implementa la interface ActionListener provista por Java.
0 0 0 0
• El método actionPerformed se redefine para modelar la 1 1
reacción del botón cuando el usuario hace click sobre él. 59 60

Profesor Luciano H. Tamargo 10