Download Programación Orientada a Objetos

Document related concepts
no text concepts found
Transcript
Programación Orientada a
Objetos
GUI en JAVA
Angela C. Carrillo Ramos
Manejo de eventos
Técnica de programación avanzada
Se trabaja con mensajes
Maneja contenedores
Objetos que escuchan y procesan eventos
Objetos que producen eventos
Pueden
ser utilizados para separar
diferentes niveles conceptuales, v.gr.
gr., la
interfaz con el modelo del mundo.
mundo.
Sirve de apoyo a algunos patrones de
diseño..
diseño
1
Modelo de eventos
TODO
Posibles aplicaciones
Control de negocio
Interfaces
Interacción entre objetos
Utilizar el ejemplo de la tienda (número de
items < que una cantidad dada)
Listeners
Adapters
Eventos
Modelo de Eventos en Java
Componentes (gráficos) son fuente de eventos
Click en el botón
O.K.
El botón genera un evento!
El botón es la fuente del
evento
2
Eventos
Modelo
de eventos de delegación
Se basa en el patrón de diseño MVC
(Model--View(Model
View-Controller, ModeloModelo-VistaVistaControlador)
Almacenar
el estado interno en un
conjunto de clases llamado modelo
Mostrar la información del modelo en una
vista
Cambiar la información del modelo en un
controlador
Eventos
Modelo de Eventos en Java
Todo componente tiene eventos.
eventos. Dichos
eventos son predefinidos.
predefinidos.
Paquete: java.
Paquete:
java.util.
util.EventObject
Un evento es un objeto que contiene
información del contexto en el que ocurrió.
ocurrió.
Button
List
TextField
ActionEvent
MouseEvent, ItemEvent
ActionEvent, TextEvent
3
Eventos
Modelo de Eventos en Java
MenuItem
Checkbox
Choice
ScrollPane
Scrollbar
TextArea
Action Event
ItemEvent
ItemEvent
AdjustmentEvent
AdjustmentEvent
TextEvent
Applet
Modelo de Eventos en Java
Existen eventos especiales que
actúan sobre todos los componentes:
componentes:
ComponentEvent
FocusEvent
KeyEvent
MouseEvent
4
Eventos Swing
AncestorEvent
ChangeEvent
DocumentEvent
MenuEvent
HyperlinkEvent
Eventos
EventObject
AWT Event
Action
Event
Container
Event
Adjustment
Event
Component
Event
Item
Event
Text
Event
Focus
Event
Input
Event
Paint
Event
Window
Event
Key
Event
Mouse
Event
5
Eventos
¿Quién reacciona ante el evento?
Escucha (Listener)
1.
2.
El
contenedor
(panel)
debe
subscribirse como escucha al
componente(botón)
Cuando el evento ocurre, los
escuchas son informados para que
reaccionen..
reaccionen
Modelo de Eventos
addActionListener
Panel
O.K.
actionPerformed
getObject
ActionEvent
6
Ejemplo
Panel p = new Panel();
Button b = new Button(“O.K”);
b.addActionListener(p);
El panel se
subscribe al botón
como escucha
Paquete Gráfico
Independiente de la plataforma
Se
trabaja
con
COMPONENTES
prefabricados
Maneja contenedores
Agrupación de COMPONENTES.
COMPONENTES.
Controla el tamaño y posicionamiento
Frame, Panel, Applet
Layout:: Distribución de los componentes
Layout
7
Paquete Gráfico
Component
Objeto fundamental en la Interfaz de
usuario
Contenedor: son a su vez componentes
Funcionalidad: Apariencia y
Comportamiento
Atributos: visibilidad, tamaño, localización
Comportamiento: Obedece a eventos
Comunica a su contenedor si va a afectar a
otros componentes
Paquete Gráfico
Contenedor (Container)
Aloja y maneja otros componentes:
Frame, Panel, Applet
add()
Adiciona componente
remove()
Elimina componente
8
Applets
Pequeñas aplicaciones que tienen acceso a
un servidor Internet, son transportadas a
través de la red y se ejecutan como parte de
un documento HMTL
<applet code=“nom.class” width=200
height=40>
</applet>
También pueden ser apreciadas con
AppletViewer
Applet
Orden de inicialización de un applet
init
start
stop
destroy
Otros métodos son:
paint
update
9
Applet
Restricciones de Seguridad
No puede leer o escribir archivos en el
host local
Sólo pueden abrir conexiones de red al
servidor donde se encuentran.
encuentran.
No pueden correr otros procesos en el
host local
Pueden trabajar con servidores para
almacenar y comunicar datos.
datos. (usando
RMI, por ejemplo)
Applet
¿Cómo se define?
class nomclase extends Applet{
<cuerpo de la clase>
}
class nomclase extends JApplet{
<cuerpo de la clase>
}
10
Applet en AWT
Imprime el mensaje Hola Mundo
import java.awt.*;
import java.applet.*;
public class HelloWorld extends Applet {
public void paint(Graphics g) {
g.drawString("Hello World !", 20, 20);
}
}
Applet en Swing
Imprime el mensaje Hola Mundo
import javax.swing.*;
import java.awt.*;
public class HelloWorld extends JApplet {
public void paint(Graphics g) {
g.drawString("Hello World !", 20, 20);
}
}
11
Applet
<HTML>
<BODY>
<APPLET code=CambioMoneda.class WIDTH=250
HEIGHT=100>
<PARAM NAME=valor VALUE=70000>
<PARAM NAME=cActual VALUE=1580>
</APPLET>
<BR>
<BR>(<A HREF="CambioMoneda.java">C&oacute;digo</A>)
</BODY>
</HTML>
Applet
import java.awt.*;
import java.applet.*;
public class CambioMoneda extends Applet {
public void paint(Graphics g) {
String strCambio = getParameter("cActual");
String strValor = getParameter("valor");
System.out.println( "cambio: " + strCambio + "; valor: " +
strValor );
double cambio = ( Double.valueOf(strCambio) ).doubleValue();
double valor = ( Double.valueOf(strValor) ).doubleValue();
g.drawString("El valor en dolares de " + valor + " pesos es: " +
valor/cambio, 20, 20);
}
}
12
Ejemplo
public class MiPanel extends Panel implements
ActionListener
{ ...
actionPerformed((ActionEvent evt)
public void actionPerformed
{
// Qué se debe hacer cuando se hace click en
el botón
}
}
Ejemplo 2 (AWT)
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class TextEntryBox extends Applet
implements ActionListener{
TextArea area;
TextField campo;
13
Ejemplo 2 (AWT)
public void init(){
setLayout(new BorderLayout());
add(“Center”, area=new TextArea());
area.setFont(new
Font(“TimesRoman”,Font.BOLD,18));
area.setText(“Hola a todos!”);
add(“South”, campo = new TextField());
campo.addActionListener(this);
}
Ejemplo 2 (AWT)
public void actionPerformed(ActionEvent e){
area.append(campo.getText() + ‘\‘\n’);
campo.setText(“”);
}
}
14
Ejemplo 2 (Swing)
Coloca todo lo del campo de texto en la Caja de Texto
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class TextEntryBox extends JApplet implements
ActionListener{
JTextArea area;
JTextField campo;
Ejemplo 2 (Swing)
public void init(){
getContentPane().setLayout(new BorderLayout());
getContentPane().add("Center",area=new
JTextArea());
area.setFont(new
Font("TimesRoman",Font.BOLD,18));
area.setText("Hola a todos!");
getContentPane().add("South",campo = new
JTextField());
campo.addActionListener(this);
}
15
Ejemplo 2 (Swing)
public void actionPerformed(ActionEvent e){
area.append(campo.getText() + '\'\n');
campo.setText("");
}
}
Ejemplo 3
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class ListaProgramas extends Applet{
public void init(){
String [] items =
{“Pregrado”,”Magister”,”Especialización”};
add(new ListaSeleccion(items));
}
}
16
Ejemplo 3
class ListaSeleccion extends Container implements
ActionListener{
List lista;
TextField texto;
ListaSeleccion (String [] items){
lista = new List(2);
for(int i=0; i<items.length;i++)
lista.addItem(items [i]);
texto = new TextField();
texto.addActionListener(this);
setLayout (new BorderLayout());
add(“Center”, lista);
add(“South”,texto);
}
Ejemplo 3
public void actionPerformed(ActionEvent e){
String busqueda = texto.getText();
for (int i=0; i < lista.getItemCount(); i++)
if (lista.getItem(i).equals(busqueda){
lista.select(i);
lista.makeVisible(i);
break;
}
texto.setText(“”);
}
}
17
Ejemplo Tokenizador
Tokenizador: Procesa una oración recibida
Tokenizador:
y la descompone en palabras, indicando el
número de veces que se repite cada una de
las palabras
Si la oración es:
es: La casa de la loma
El resultado es:
es:
La
2
Casa
1
De
1
Loma 1
Ejemplo Tokenizador (AWT)
import java.awt.*;
import java.awt.event.*;
import java.awt.Toolkit;
import java.io.*;
public class AppletEjemplo extends java.applet.Applet {
/* -------------------------------------------------------* Atributos de la clase
* -------------------------------------------------------- */
Tokenizador procesador = new Tokenizador();
// Tokenizador para descomponer una oración en
palabras
18
Ejemplo Tokenizador (AWT)
// Componentes para la interfaz
// Entrada
TextField oracion = new TextField (80);
// Campo de texto para leer la
oración
// Salida
TextArea resultado = new TextArea(5,80); //Area de texto para mostrar
resultados
// Botones
Button procesar = new Button("Procesar"); // Botón para descomponer la
oración
Button limpiar = new Button("Limpiar"); // Boton para limpiar los campos
Button salir = new Button("Salir"); // Boton para terminar el programa
public void init() {
//---------------------------------------------------------------------//---------------------------------------------------------------------// Pinta la interfaz del applet
//---------------------------------------------------------------------//---------------------------------------------------------------------// PRE: True
// POST: True
//---------------------------------------------------------------------//----------------------------------------------------------------------
Ejemplo Tokenizador (AWT)
setLayout(new FlowLayout());
// Mostrar los campos para leer la oración.
Panel panelOracion = new Panel();
panelOracion.setLayout(new GridLayout(2,1));
Label labelOracion = new Label("Escriba la oración
a procesar.");
panelOracion.add(labelOracion);
panelOracion.add(oracion);
add(panelOracion);
19
Ejemplo Tokenizador (AWT)
// Mostrar los campos para mostrar los resultados.
Panel panelResultado = new Panel();
panelResultado.setLayout(new GridLayout(2,1));
Label labelResultado = new Label("El resultado es:");
panelResultado.add(labelResultado);
panelResultado.add(resultado);
add(panelResultado);
// Mostrar Botones
Panel panelBotones = new Panel();
panelBotones.setLayout(new FlowLayout());
panelBotones.add(procesar);
panelBotones.add(limpiar);
panelBotones.add(salir);
add(panelBotones);
Ejemplo Tokenizador (AWT)
//
//-- Asociar comportamiento a los eventos -----------------------procesar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ProcesarOracion();
}
});
limpiar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
LimpiarCampos();
}
});
salir.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
20
Ejemplo Tokenizador (AWT)
public void ProcesarOracion() {
//
//----------------------------------------------------------------------------------------------------------------------------------------// Procesa la oración que está en el campo de texto
"oracion"
//
//----------------------------------------------------------------------------------------------------------------------------------------// PRE: True
// POST: True
//
//----------------------------------------------------------------------------------------------------------------------------------------// Procesar la oración y mostrar resultados
procesador.Procesar(oracion.getText());
procesador.GenerarResultados(resultado);
}
Ejemplo Tokenizador (AWT)
public void LimpiarCampos() {
//
//----------------------------------------------------------------------------------------------------------------------------------------// Limpia los campos de entrada y salida
//
//----------------------------------------------------------------------------------------------------------------------------------------// PRE: True
// POST: True
//
//----------------------------------------------------------------------------------------------------------------------------------------// Limpiar los campos
oracion.setText("");
resultado.setText("");
}
}
21
Ejemplo Tokenizador (Swing)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class AppletEjemplo extends JApplet {
// Atributos de la clase
Tokenizador procesador = new Tokenizador();
// Tokenizador para descomponer una oración en
palabras
Ejemplos Swing
// Componentes para la interfaz
// Entrada
JTextField oracion = new JTextField (40); // Campo de texto
para leer la oración
// Salida
JTextArea resultado = new JTextArea(5,40); //Area de texto
para mostrar resultados
// Botones
JButton procesar = new JButton("Procesar"); // Botón para
partir la oración
JButton limpiar = new JButton("Limpiar"); // Boton para limpiar
los campos
JButton salir = new JButton("Salir"); // Boton para terminar el
programa
22
Ejemplo Tokenizador (Swing)
public void init() {
getContentPane().setLayout(new FlowLayout());
// Mostrar los campos para leer la oración.
JPanel panelOracion = new JPanel();
panelOracion.setLayout(new GridLayout(2,1));
JLabel labelOracion = new JLabel("Escriba la oración
a procesar.");
panelOracion.add(labelOracion);
panelOracion.add(oracion);
getContentPane().add(panelOracion);
Ejemplo Tokenizador (Swing)
// Mostrar los campos para mostrar los resultados.
JPanel panelResultado = new JPanel();
panelResultado.setLayout(new GridLayout(2,1));
JLabel labelResultado = new JLabel("El resultado es:");
panelResultado.add(labelResultado);
resultado.setLineWrap(true); /* para cortar las líneas de
acuerdo al tamaño del área de texto */
panelResultado.add(new JScrollPane(resultado));
//El área de texto tiene un Scroll. Se debe crear un panel
que permita esto y adicionar a dicho panel el área de
texto.
getContentPane().add(panelResultado);
23
Ejemplos Swing
// Mostrar Botones
JPanel panelBotones = new JPanel();
panelBotones.setLayout(new FlowLayout());
panelBotones.add(procesar);
panelBotones.add(limpiar);
panelBotones.add(salir);
getContentPane().add(panelBotones);
//
//-- Asociar comportamiento a los eventos -----------------------procesar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ProcesarOracion();
}
});
Ejemplo Tokenizador (Swing)
limpiar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
LimpiarCampos();
}
});
salir.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
24
Ejemplo Tokenizador (Swing)
public void ProcesarOracion() {
//
//------------------------------------------------------------------------------------------------------------------------------------------// Procesa la oración que está en el campo de texto
"oracion"
//
//------------------------------------------------------------------------------------------------------------------------------------------// PRE: True
// POST: True
//
//------------------------------------------------------------------------------------------------------------------------------------------// Procesar la oración y mostrar resultados
procesador.Procesar(oracion.getText());
procesador.GenerarResultados(resultado);
}
Ejemplo Tokenizador (Swing)
public void LimpiarCampos() {
//
//------------------------------------------------------------------------------------------------------------------------------------------// Limpia los campos de entrada y salida
//
//------------------------------------------------------------------------------------------------------------------------------------------// PRE: True
// POST: True
//
//------------------------------------------------------------------------------------------------------------------------------------------// Limpiar los campos
oracion.setText("");
resultado.setText("");
}
}
25
Ejemplo Tokenizador (Swing)
public void GenerarResultados(JTextArea area) {
int i;
Palabra p;
area.setText("");
for ( i=0; i<palabras.size(); i++ ) {
p=(Palabra)palabras.elementAt(i);
area.append(p.GetPalabra() + "\
"\t" +
p.GetRepeticiones() + "\
"\n");
}
}
26