You are on page 1of 54

Applets

Aplicaciones diseadas para ejecutarse en el contexto de ejecucin de un


Navegador.
El Applet se responsabiliza de la gestin de la parte de la zona de visualizacin
del documento que el Navegador le asigna.
Esta rea ofrece un interfaz grfico (en contraposicin al modo texto o
consola):
Se rompe la nocin de secuencialidad.
Programacin dirigida por eventos.
Se necesita un conjunto de primitivas grficas que permitan manipular la
pantalla.
Existe un conjunto de componentes estndar.
Necesita un sistema de gestin de ubicacin de componentes sin formato
fijo, es decir, sin posiciones y tamaos absolutos.
Caractersticas de los Applets
La salida no se basa en mtodos orientados a consola
(System.out.print). Se utilizan en su lugar primitivas para: crear
lneas, crculos y dems objetos geomtricos, para gestionar colores de
relleno y fondo, gestionar texto (tipos de fuentes y tamaos), etc.
La entrada no se basa en mtodos orientados a consola
(System.in.read).
Las aplicaciones grficas se estructuran segn el modelo de
programacin dirigida por eventos.
Las bibliotecas de Java tambin definen componentes estndar
(AWT).
El fichero HTML
.....
<APPLET CODE="x.class" HEIGHT=400 WIDTH=700></APPLET>
.....
El navegador (cliente) carga un Applet (x.class) de la mquina servidora y
lo ejecuta (posee una mquina virtual Java), es decir, crea una instancia de la
clase y lanza sobre la misma una secuencia de mensajes determinados (ciclo
de vida del Applet).
Funcionamiento de los Applets
Todo Applet se implementa como una extensin de la clase Applet
del paquete java.applet.
La clase Applet deriva de Panel que a su vez deriva de
Container que a su vez deriva de Component, por lo que hereda
las primitivas grficas, componentes de interfaz, etc. de estas clases.
La respuesta de un Applet ante los eventos de usuario, por defecto, es
no hacer nada.
La tarea del programador consiste en extender la clase Applet e
implementar la respuesta a los distintos eventos que puedan
producirse.
Ejemplo
import java.awt.Graphics;
public class hola extends java.applet.Applet {
public void paint( Graphics g ) {
g.drawString("Hola",20,20);
}
}
<HTML>
<HEAD> saludo </HEAD>
<BODY>
<APPLET CODE="hola.class" WIDTH=600 HEIGHT=400></APPLET>
</BODY>
</HTML>
Ciclo de vida de un Applet
MENSAJ E EVENTO DEL NAVEGADOR COMPORTAMI ENTO
init Carga documento HTML con marca
<APPLET> y la clase principal
Cdigo de inicializacin (inicializar
campos, aadir componentes de
interaccin, etc.)
start Tras init y cada vez que se vuelva a
visitar el applet con el navegador.
Iniciar animaciones y otras tareas.
stop Cada vez que se abandona un applet Suspender animaciones y otras tareas
destroy Termina el applet (se descarta el
documento o se abandona el
navegador)
Limpieza de los recursos del sistema
paint Cada vez que se detecta la necesidad
de pintar el rea de pantalla del
applet
Redibujar lo necesario en el rea de
interaccin
Grficos
Sistema de coordenadas:
Bidimensional.
La esquina superior izquierda se considera el (0,0).
La componente x crece hacia la derecha y la y hacia abajo.
Figuras:
Lneas, rectngulos, crculos, etc.
Toda accin de dibujo se realiza a travs de la clase Graphics.
El cdigo de dibujo debe aparecer en el mtodo
paint( Graphics g)
El objeto g es pasado por el entorno (Contexto grfico).
Color.
Texto.
Imgenes (gif, getImage, getDocumentBase, drawImage, etc.).
Sonido (au, getAudioClip, etc.).
Componentes de Interfaz de usuario
Applet
import java.awt.*;
public class p extends java.applet.Applet {
public void paint(Graphics g){
g.drawString("Hola",20,20);
}
}
Texto (Font)
import java.awt.*;
public class p extends java.applet.Applet {
public void paint(Graphics g) {
g.drawString("Mensaje de prueba",10,10);
Font f = new Font("Courier",Font.BOLD,14);
g.setFont(f);
g.drawString("Mensaje de prueba",10,50);
}
}
Etiqueta (Label)
import java.awt.*;
public class p extends java.applet.Applet {
public void init() {
add(new Label("Una etiqueta"));
add(new Label("otra",Label.RIGHT));
}
}
Botn (Button)
import java.awt.*;
import java.awt.event.*;
public class p extends java.applet.Applet {
Button b,borra;
public void init() {
b = new Button("yo"); add(b);
b.addActionListener( new ActionListener() {
public void actionPerformed (ActionEvent e) {
showStatus("Nemesio Expsito");
}
});
borra = new Button("borra nombre"); add(borra);
borra.addActionListener( new ActionListener() {
public void actionPerformed (ActionEvent e) {
showStatus("");
}
});
}
}
Campo de texto (TextField)
import java.awt.*;
import java.awt.event.*;
public class p extends java.applet.Applet {
TextField t;
public void init() {
t = new TextField("este es el valor por defecto");
add(t);
t.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
escribe();
}
});
}
public void escribe() {
showStatus("has escrito \""+t.getText()+"\"");
}
}
rea de Texto (TextArea)
import java.awt.*;
import java.awt.event.*;
public class p extends java.applet.Applet {
TextArea ta;
public void init() {
ta = new TextArea(" tira \n de caracteres que \n
+ocupa varias lineas",3,10);
add(ta);
ta.addTextListener( new TextListener() {
public void textValueChanged(TextEvent e) {
escribe();
}
});
}
public void escribe() {
showStatus("has escrito \""+ta.getText()+"\"");
}
}
Lienzo o tapiz (Canvas)
import java.awt.*;
import java.awt.event.*;
public class p extends java.applet.Applet {
ZonaDibujo papel;
public void init() {
resize(200,200);
papel= new ZonaDibujo(); add(papel);
}
}
class ZonaDibujo extends Canvas {
public ZonaDibujo() {
resize(100,100);
addMouseListener( new MouseAdapter(){
public void mousePressed(MouseEvent e) {
int x=e.getX(), y=e.getY();
getGraphics().drawString("("+x+","+y+")",x,y);
}
});
}
public void paint(Graphics g) {
g.drawRect(0,0,99,99); // dibuja un borde alrededor del
canvas
}
}
Lista desplegable (Choice)
import java.awt.*;
import java.awt.event.*;
public class p extends java.applet.Applet {
Choice c;
public void init() {
c = new Choice();
c.addItem("Rojo");
c.addItem("Verde");
c.addItem("Azul");
add(c);
c.addItemListener( new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange()==ItemEvent.SELECTED)
escribeSel();
else borra();
}
});
}
void escribeSel() {
showStatus("seleccionado "+ c.getSelectedItem());
}
void borra() { showStatus(""); }
}
Casilla de verificacin (Checkbox)
import java.awt.*;
import java.awt.event.*;
public class p extends java.applet.Applet {
Checkbox c;
public void init() {
c = new Checkbox("etiqueta");
add(c);
c.addItemListener( new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange()==ItemEvent.SELECTED)
escribeSel();
else borra();
}
});
}
void escribeSel() { showStatus("activo"); }
void borra() { showStatus(""); }
}
Botones de radio (CheckboxGroup)
import java.awt.*;
public class p extends java.applet.Applet {
public void init() {
CheckboxGroup g= new CheckboxGroup();
add(new Checkbox("etiqueta 1",g,true));
add(new Checkbox("etiqueta 2",g,false));
}
}
Lista (List)
import java.awt.*;
public class p extends java.applet.Applet {
List prov1, provN;
public void init() {
String[] items = {
"Murcia","Castelln","Valencia","Alicante",
"Barcelona","Tarragona","Almera" };
prov1= new List(5);
for (int i=0; i<items.length; i++)
prov1.addItem(items[i]);
add(prov1);
provN= new List(5,true);
for (int i=0; i<items.length; i++)
provN.addItem(items[i]);
add(provN);
}
}
Programacin dirigida por eventos
Divisin de responsabilidades
Navegador: Detecta en qu momentos hay que repintar
la pantalla Avisa al applet y le proporciona un
contexto grfico asociado al rea de visualizacin
llamando al mtodo paint().
Recoge eventos externos y los pasa al applet mediante
llamadas a los manejadores de eventos del applet.
Applet: Realiza las acciones pertinentes cuando las
solicita el navegador: pintar, responder a eventos externos,
etc. sobreescribiendo los mtodos adecuados.
Tipos de eventos
Todos los eventos son subclases de
java.util.EventObject.
Eventos producidos por usuario: teclado, ratn, accin
sobre componentes de interaccin.
Clase java.awt.AWTEvent
de la biblioteca java.awt.event.
El modelo de Eventos de Java: Fuente-Oyente
Cada Evento posee un objeto fuente (getSource()) y un tipo (getID()).
Tipo de Evento: Eventos representados por la misma clase.
Cada clase define un conjunto de mtodos adecuados para cada tipo de evento
definido.
Modelo de eventos:
La idea: Un objeto fuente genera una evento y notifica dicho evento a todos
los objetos de la lista llamando al mtodo adecuado sobre el oyente y
pasndole el Evento como parmetro.
fuente
oyente oyente oyente
Lista de oyentes (eventListener)
Funcionamiento
El objeto fuente dispone de mtodos para aadir oyentes a su
lista (addMouseListener, addMouseMotionListener,
), y para quitarlos de la lista (removeMouseListener,
removeMouseMotionListener, ).
Todos los oyentes deben implementar el mtodo adecuado. Esto
se garantiza obligando a que los oyentes que deseen ser
notificados por la fuente del Evento implementen una
determinada interfaz (ActionEventActionListener).
El paquete java.awt.event define un interfaz para cada
clase de Evento (excepto para la clase MouseEvent)
Adaptadores
Problema: Slo interesa responder a un tipo de evento de los definidos en el
interfaz.
Para cada Clase de Evento cuya interfaz posee ms de un mtodo (ms de un
tipo de evento), se dispone de una clase adaptador que implementa dicha
interfaz con cdigo vaco.
package java.awt.event;
public abstract class WindowAdapter implements WindowListener
{
public void windowOpened(WindowEvent e) {}
public void windowClosing(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
}
Componentes de interaccin como fuentes de
eventos
Una vez creada la clase para el oyente hay que:
instanciar un objeto de dicha clase y
registrarla en la correspondiente fuente de eventos.
Mediante los mtodos addXListener de la fuente se
registran (aaden a la lista) los oyentes de la clase
XEvent (que implementan el interface XListener).
Mediante los mtodos removeXListener se quitan de
dicha lista.
Clases anidadas para manejadores de eventos
Los manejadores de eventos son objetos instancias de clases que implementan
los mtodos definidos en la interfaz adecuada.
En la versin 1.1.6 del JDK es posible definir clases dentro de clases y,
adems, instanciar objetos de clases al mismo tiempo que se declaran:
borra.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { borra();
}
});
addMouseMotionListener( new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
otroPunto(e.getX(),e.getY());
}
});
class pActionListener implements ActionListener {
Applet a;
pActionListener(Applet app) {
a = app;
}
public void actionPerformed (ActionEvent e) {
a.showStatus("Nemesio Expsito");
}
}
public class p extends java.applet.Applet {
Button b,borra;
public void init() {
b = new Button("yo"); add(b);
b.addActionListener( new pActionListener(this) );
borra = new Button("borra nombre"); add(borra);
borra.addActionListener( new ActionListener() {
public void actionPerformed (ActionEvent e) {
showStatus("");
}
});
}
}
public class p extends java.applet.Applet {
Button b,borra;
class pActionListener implements ActionListener {
Applet a;
pActionListener(Applet app) {
a = app;
}
public void actionPerformed (ActionEvent e) {
a.showStatus("Nemesio Expsito");
}
}
public void init() {
b = new Button("yo"); add(b);
b.addActionListener( new pActionListener(this) );
borra = new Button("borra nombre"); add(borra);
borra.addActionListener( new ActionListener() {
public void actionPerformed (ActionEvent e) {
showStatus("");
}
});
}
}
public class p extends java.applet.Applet {
Button b,borra;
class pActionListener implements ActionListener {
public void actionPerformed (ActionEvent e) {
showStatus("Nemesio Expsito");
}
}
public void init() {
b = new Button("yo"); add(b);
b.addActionListener( new pActionListener() );
borra = new Button("borra nombre"); add(borra);
borra.addActionListener( new ActionListener() {
public void actionPerformed (ActionEvent e) {
showStatus("");
}
});
}
}
public class p extends java.applet.Applet {
Button b,borra;
public void init() {
b = new Button("yo"); add(b);
b.addActionListener( new ActionListener() {
public void actionPerformed (ActionEvent e) {
showStatus("Nemesio Expsito");
}
});
borra = new Button("borra nombre"); add(borra);
borra.addActionListener( new ActionListener() {
public void actionPerformed (ActionEvent e) {
showStatus("");
}
});
}
}
Contentedores y gestores de ubicacin
Contenedores
Los contenedores agrupan varios componentes.
Los contenedores distribuyen dichos componentes
de la manera ms adecuada.
Los contenedores son, a su vez, componentes.
Los contenedores contienen el cdigo necesario
para el control de eventos, cambiar la forma del
cursor o modificar el icono de la aplicacin.
Contenedores del AWT
Paneles (Panel)
Contenedor genrico de componentes, no tiene representacin visual
Suele utilizarse para distribuir componentes de una determinada manera
Ventanas (Window)
Concepto tpico de ventana (aplicacin, dilogo, etc. )
No puede incluirse en otro contenedor
Sirve como clase base para marcos y ventanas de dilogo
Dispone de mtodos especficos para alterar la posicin, el tamao, ttulo,
forma del cursor y barra de mens
Marcos (Frame)
Ventana con borde y ttulo
Generan varios tipos de eventos
Ventanas de dilogo (Dialog)
Ventana con borde y ttulo que permite recoger entradas de usuario
Se lanza desde otra ventana
Puede ser modal o no (si es necesario cerrar el dilogo antes de proseguir con
la aplicacin)
Se puede redimensionar y mover pero no maximizar o minimizar
Jerarqua de clases del AWT
Container
Window
Panel
Frame
Dialog Applet
Component
Gestores de ubicacin
Los elementos No se sitan en la pantalla mediante coordenadas absolutas sino
mediante posiciones relativas entre s.
Los componentes:
Poseen un tamao mnimo y un tamao preferido (mtodo
PreferredSize).
Pueden indicar el espacio alrededor de su borde interior (mtodo
insets).
El gestor de ubicacin parte de estas indicaciones y, a partir de la poltica
establecida, hace lo que puede.
Sugerencia: Dividir el espacio disponible en varios paneles y gestionar su
ubicacin particular para cada uno de ellos. El contenedor ms comn es
Panel.
Los gestores de ubicacin se encargan de ubicar los componentes en
contenedores.
Cada contenedor contiene una objeto gestor de ubicacin al que se le hacen
llamadas (Container.add).
Dado que los contenedores son componentes, se pueden anidar.
Gestores de ubicacin predefinidos
Flujo (FlowLayout)
Bordes (BorderLayout)
Rejilla (GridLayout)
Tarjetas (CardLayout)
Flujo (FlowLayout)
Ubica los componentes de izquierda a derecha hasta lograr la lnea
antes de pasar a la siguiente. Es el que se utiliza por defecto.
import java.awt.*;
public class p extends java.applet.Applet {
public void init() {
setLayout(new FlowLayout());
add(new Button("Ok"));
add(new Button("Cancel"));
}
}
Bordes (BorderLayout)
Ubica los componentes en cinco posibles lugares: Norte, Sur, Este,
Oeste y Centro. No es necesario cubrir todas las ubicaciones. Los
componentes se redimensionan para ocupar todo el espacio del panel.
import java.awt.*;
public class p extends java.applet.Applet {
public void init() {
setLayout(new BorderLayout());
add("North", new Label("Por ejemplo una cabecera"));
add("South", new TextField("aqui escribimos un mensaje"));
add("West", new Button("SALIR"));
add("East", new Button("AYUDA"));
add("Center", new TextArea("ejemplo de \n texto en +
\nla parte central"));
}
}
Rejilla (GridLayout)
Ubica los componentes en una matriz de filas y columnas. Se rellena
por filas.
import java.awt.*;
public class p extends java.applet.Applet {
public void init() {
setLayout(new GridLayout(3,2));
for (int i=1; i<7; i++)
add(new Button(""+i));
}
}
Tarjetas (CardLayout)
Visualiza un slo componente cada vez expandido en todo el
contenedor.
Se referencian mediante una tira definida por el programador, pueden
mostrarse mediante show con la tira apropiada.
public class p extends java.applet.Applet {
CardLayout ubi;
public void init() {
ubi = new CardLayout(); setLayout(ubi);
Button bj,bp,ba;
bj= new Button("Juan");
bp= new Button("Pepe");
ba= new Button("Ana");
add("Juan",bj); add("Pepe",bp); add("Ana",ba);
ubi.show(this,"Ana");
bj.addActionListener (new ActionListener() {
public void actionPerformed(ActionEvent e) {
muestra("Pepe");
}
});
bp.addActionListener (new ActionListener() {
public void actionPerformed(ActionEvent e) {
muestra("Ana");
}
});
ba.addActionListener (new ActionListener() {
public void actionPerformed(ActionEvent e) {
muestra("Juan");
}
});
}
void muestra(String s) { ubi.show(this,s); }
}
GridBagLayout y
GridBagConstraints
Parecido a GridLayout pero ms flexible: permite que
un componente ocupe varias celdas.
Paso de parmetros en ficheros HTML
<APPLET CODEBASE=URL CODE=applet.class HEIGHT=100 WIDTH=50>
< PARAM NAME=p1 VALUE=230>
< PARAM NAME=p2 VALUE=Pedro Alonso>
. . .
< PARAM NAME=direcCorreo VALUE=palonso@dsic.upv.es>
</APPLET>
Desde el Applet se invoca el parmetro mediante
Applet.getParam(nombreParametro)
que devuelve el String correspondiente al valor del parmetro indicado.
import java.awt.*;
public class p extends java.applet.Applet {
public void init() {
System.out.println(Anchura = + getParameter("ancho"));
System.out.println("p1 vale " + getParameter("p1"));
System.out.println("p2 vale " + getParameter("p2"));
}
}
Restricciones y posibilidades de los Applets
Desde el punto de vista de la seguridad la ejecucin en una mquina
cliente de un programa cargado de un servidor remoto es un riesgo.
Lenguaje seguro (sin punteros, comprobaciones en ejecucin, )
Contexto de ejecucin rgido:
Un applet no puede abandonar el intrprete Java, definir mtodos
nativos, enlazar dinmicamente con bibliotecas nativas ni arrancar
programas en la mquina cliente.
No puede leer/escribir ficheros sobre la mquina local ni acceder a
otros recursos del sistema.
Slo puede abrir conexiones de red con el servidor desde el que ha
descargado.
Las ventanas abiertas por el applet poseen un aspecto distinto a las
abiertas por una aplicacin.
Sin embargo, tienen ventajas sobre aplicaciones Java aisladas:
Reproduccin de sonido,
abrir conexiones de red con la mquina remota,
visualizar documentos HTML,
invocar mtodos pblicos de otros applets en la misma
mquina.

You might also like