Download Programación en Java

Document related concepts
no text concepts found
Transcript
Curso
Programación en Java
Tema 9
APPLETS
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
APPLET,s Y APLICACIONES
 Hay dos formas de programar y ejecutar procesos en Java, en modo aplicación y en
modo applet.
 Una aplicación se caracteriza por definir un método que sirve de punto de entrada al
programa, es el método main(). Del conjunto de clases que forman la aplicación, una de
ellas debe ser la clase principal y definir el método main().
 Una aplicación puede usar todos los recursos disponibles del computador; en ese sentido,
es local respecto al computador en que "corre".
 La popularidad y penetración profesional de Java se debe a la portabilidad y a que ha
sido diseñado para la programación y ejecución por internet (también a la gratuidad).
 La máxima expresión de la portabilidad, "escribir una vez, ejecutar mil veces", se
encuentra en los applets. La finalidad de los appletes es que los usuarios puedan acceder,
ejecutar software desde cualquier computador dotado de conexión a internet.
 En los últimos años Java ha desarrollado la metodología Java Web Start (arranque de
Java desde la web) para la ejecución de aplicaciones desde internet.
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
2
CONCEPTOS de APPLET,s
 Los applets, inicialmente pequeñas aplicaciones, se incrustan dentro de las páginas web.
 Pueden llevar a cabo múltiples tareas: mostrar animaciones, cargar sonidos, conectar con
una base de datos, ....
 Los applets son objetos de clases que derivan de la clase JApplet (también, de la clase
Applet).
 La ejecución de un applet la realiza el navegador (browser) empleado por el usuario
(Netscape, Internet Explorer, ...).
 El JDK incorpora un "visor" de applets, es el appletviewer. Permite probar el applet;
además, con el se tiene la certeza de coincidencia de versión.
 Los applets tienen limitaciones, menos privilegios de ejecución que las aplicaciones, en
pos de la seguridad.
 Para utilizar un applet hace falta un documento HTML.
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
3
DOCUMENTO HTML
 La página HTML (HiperText Markup Language) indica al navegador los applets que debe
cargar y donde debe ubicarlos dentro de la página web
 Un documento HTML está formado por etiquetas (tags o marcadores) que indican
acciones a realizar. La etiqueta necesaria para utilizar un applet tiene que indicar al
navegador lo siguiente:
•
•
Dirección (URL) donde se encuentran los archivos de clases.
Tamaño y situación del applet en la página web
 La etiqueta <applet> (también la etiqueta <object>, tiene igual significado) se utiliza par
incrustar un applet en una página HTML.
 <applet> permite establecer unos atributos para especificar el applet que va a ejecutar la
máquina virtual java del navegador, y características como son el tamaño de la ventana.
También, se puede poner parámetros con información necesaria para la ejecución del
applet.
 Además de la etiqueta <applet>, la página web puede tener cualquier otro elemento
HTML: tipos de letras, gráficos, ...
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
4
ETIQUETA APPLET
<APPLET
code = MiApplet.class
obligatorio, el archivo con
bytecode
archive = MiArchivo.jar
codebase = dirección donde se encuentra el applet, asume path actual
alt = "texto alternativo si no puede visualizarse el applet"
name = " MI Applet"
width = 300
obligatorio
height = 100 >
obligatorio
<param name = "parametro1" value ="valor asociado a parametro1">
<param name = "parametro2" value ="valor asociado a parametro2">
</APPLET>
El atributo archive especifica el archivo comprimido en el que se encuentran todas las
clases,
imagenes, sonidos, ..., necesarios para la ejecución del applet.

El navegador carga el documento HTML; al encontrarse la etiqueta
< APPLET code = ... busca la clase y descarga el archivo .class de la dirección
indicada en codebase.
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
5
EJEMPLO DOCUMENTO HTML
<HTML>
<HEAD>
<TITLE>Applet HTML Page</TITLE>
</HEAD>
<BODY>
<H3><HR WIDTH="100%">Applet HTML Page<HR WIDTH="100%"></H3>
<P>
<APPLET codebase="file:/C:/ignacio/JAVA/Ejercicios/EjemApplet/build/classes/"
code="EjemApplet.class" width=350 height=200></APPLET>
</P>
<HR WIDTH="100%"><FONT SIZE=-1><I>Generated by NetBeans IDE</I></FONT>
</BODY>
</HTML>
Nota: FONT SIZE=-1
HR WIDTH="100%"
H3
I
P
TITLE
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
resta 1 al tamaño de fuente
escribe línea horizontal al 100%(toda la pantalla)
indica que es un tipo de título (hay H1, ...)
estilo de fuente cursiva
define un párrafo (consigue línea en blanco por encima)
título para el navegador
6
CREAR APPLET DESDE NetBeans
 Primero se crea un proyecto de la forma habitual:
New Project -> Categories: General
Projects: Java Class Library
Nombre del proyecto: Ejem2Applet
 En segundo lugar, se crea la(s) clases con new File ... Una de las clases debe ser la clase applet,
para lo cual:
new File ->
Categories: Java Class
File Types: Japplet
se escribe el nombre del fichero (coincida con el de la clase). Crea un esqueleto, con la
declaración de la clase; por ejemplo:
public class ParamApplet extends javax.swing.JApplet { ...
Consejo: añadir las sentencias import escritas a continuación:
import java.awt.*;
import javax.swing.*;
// paquete con las clases swing de componentes
gráficos, entre ellas JApplet
public class ParamApplet extends JApplet { ...
 A continuación, se modifica la clase: métodos init(), start() ...
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
7
EJECUTAR APPLET DESDE NetBeans

Una vez implementadas las clases que forman el proyecto, y la clase applet, se
compila el proyecto.
 Para ejecutar el applet, se selecciona la clase applet desde el nodo del proyecto, o
desde Files. Se hace click con el botón derecho; del menú que se despliega, la
opción run file ejecuta el applet.
 Esta ejecución la realiza el appletviewer. Internamente, netbeans crea un
documento html con los tags necesarios en el path build. Por ejemplo,
...\build\ParamApplet.html
 Si por alguna razón se quiere cambiar el docimento HTML, en el entorno netbeans
hay que proceder de la siguiente forma:
1.
2.
Copiar el documento original en el path src (donde se encuentra el archivo fuente .java)
Editar y modificar el documento html
La próxima ejecución del applet aplicará el documento html que se encuentra en el path src,
para lo cual netbeans lo mueve desde el path src al path buid.
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
8
EJEMPLO
Se puede probar con alguno de estos dos applets
import java.awt.*;
import javax.swing.*;
public class ParamApplet
extends JApplet
{
private String saludo;
public void init()
{
saludo = "Buenas y frescas
noches";
}
public void paint(Graphics g)
{
g.drawString(saludo,20, 40);
}
}
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
import java.awt.*;
import javax.swing.*;
public class EjemApplet
extends JApplet
{
public void init()
{
JLabel a = new JLabel
("Hola a todos, menos a uno",
SwingConstants.CENTER);
JButton b = new
JButton("Aceptar");
add(a, BorderLayout.NORTH);
add(b,BorderLayout.CENTER);
}
}
9
VISOR DE APPLETS
 Para visualizar correctamente el applet, se necesita un navegador que
implemente la JVM
 Si una vez cargado el archivo HTML en el navegador no aparece el applet, es
problable que el navegador esté empleando su máquina virtual incorporada, y
será necesario configurarlo para que utilice el Java Plug-in en su lugar.
 El visor de applets (appletviewer) solo muestra el applet, no el texto HTML que
lo rodea.
 Si un archivo HTML contiene varias etiquetas <APPLET>, el visor de applets
hace que se muestren varias ventanas.
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
10
JERARQUÍA DE LA CLASE JAppet
 Presenta un marco de trabajo de aplicación para construir otras clases. Un applet
concreto va a heredar de la clase java.applet.Applet o de la JApplet.
javax.swing.JApplet
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
11
CREACCIÓN DE UN APPLET
 Un applet es una clase que deriva de la clase Applet (java.applet.Applet). Esta
clase es un componente AWT.
 Para implementar applets también se puede derivar de la clase JApplet
(javax.swing.JApplet). La clase JApplet deriva directamente de Applet. JApplet
forma parte del paquete swing.
 Siempre que un applet tenga componenetes de swing ( etiquetas, botones, ...)
es preciso que la clase derive de JApplet.
 La declaración de la clase applet será similar a:
import javax.swing.*;
import java.awt.*;
// puede ser necesario para eventos
public class miclaseApplet extends Japplet
{
...
}
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
12
CICLO DE VIDA DE UN APPLET (I)
 La clase Applet dispone de cuatro métodos que controlan la creación y ejecución de un
applet: init(), start(), stop() y destroy().
 Estos métodos son heredados por JApplet.
 La definición de los cuatro métodos en la clase Applet está vacía, no tiene sentencias.
public class Applet {
public void init() { }
// esta es la definición de init()
 La importancia de los métodos viene dada porque interactúan con el navegador o
visualizar del applet.l estable
 Los métodos se pueden sobrescribir en nuestra clase applet, para dotarles de
funcionalidad.
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
13
CICLO DE VIDA DE UN APPLET (II)
 public void init().
El navegador llama a este método en la primera inicialización del applet, cuando el applet
es cargado.
La redefinición del método se realiza con el fin de:
•
incluir aquellas tareas que en otras clases se implementen en el constructor.
• incluir las tareas que lleven una cantidad considerable de tiempo.
• proceso de valores procedentes del tag param del documento html
Por ejemplo:
public class MiApplet extends JApplet
{
public void init()
{
double r;
String c;
c = getParameter("RADIO");
r = Double.parseDouble(c);
...
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
<HTML>
...
<APPLET CODE = MiApplet.class
WIDTH = "100" HEIGHT = "50" >
<PARAM NAME = "RADIO" VALUE = "10.5" >
...
14
CICLO DE VIDA DE UN APPLET (III)
 public void start().
El navegador llama automáticamente al método start() cuando termina la
ejecución de init(). También, se llama cada vez que el usuario visualiza el
applet en el navegador, esto significa que este método vaya a ser llamado en
repetidas ocasiones durante la vida del applet.
La redefinición del método se realiza con el fin de poner el código relativo a la
página que se está viendo:
• iniciar el sonido de una sintonia.
• empezar la animación.
• iniciar los hilos de ejecución implicados en la página.
Una página web puede ser ocultada y volver a ser visible. Cuando vuelve a ser
visible se llama de nuevo a start().
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
15
CICLO DE VIDA DE UN APPLET (IV)
 public void stop().
El navegador invoca a stop() cuando el applet se aparta de la vista del
navegador. Por consiguiente puede ser llamado repetidas veces durante la vida
de un applet.
También se llama justo antes de destruir el applet con el método destroy().
La redefinición del método se realiza con el fin de detener las tareas más
costosas y así evitar la ralentización del sistema.
 public void destroy().
Se llama cuando se descarga el applet del navegador. Se llama solo una vez.
Se utiliza para liberar los recursos.
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
16
CICLO DE VIDA DE UN APPLET (V)
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
17
SEGURIDAD DE UN APPLET
 Un applet puede ser descargado por un navegador en cualquier ordenador conectado a la
red. Si ni hubiera restricciones, un usuario al cargar una página web ejecutaría todos los
applets que tuviera y podría dañar su sistema.
 El entorno restringido de ejecución donde se ejecuta un applet se denomina sandbox.
 Un applet puede mostrar imagenes, sonidos, obtener una entrada de usuario y enviarla al
servidor.
 Las restricciones generales son las siguientes:
• No pueden acceder a archivos locales.
• No pueden ejecutar programas locales (no pueden ejecuta exec(), exit()).
• No pueden abrir sockets con otras computadoras. No se pueden comunicar con otra
computadora, excepto el servidor origen.
• No pueden obtener información relativa a la computadora local, excepto la versión de
Java y del S.O..
 Para admitir diferentes niveles de seguridad, se pueden utilizar los applets firmados. Estos
llevan consigo un certificado que indica la identidad del usuario.
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
18
PARAMETROS DE UN APPLET
 Los applets pueden utilizar información procedente de la página HTML. Esto se hace
utilizando la etiqueta PARAM en la página HTML. Para obtener el valor del parámetro se
llama al método getParameter() de la clase Applet.
 Formato de etiqueta PARAM:
<PARAM NAME="nombre" VALUE="valor_asociado"/>
 Los parámetros siempre se pasan como cadenas. Es decir, la información asociada a
VALUE siempre es una cadena.
 Prototipo de getParameter():
public String getParameter(String nombre);
 getParameter()si no encuentra el nombre del parámetro devuelve null.
 getParameter()distingue maýusculas de minúsculas en la cadena nombre.
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
19
EJEMPLO DE UN APPLET
 Desde el método init() se leen tres parámetros: titular, tipo de letra y tamaño. Si los
parámetros son null, quiere decir que no se han especificado en la página html.
El método start() aumenta el tamaño del tipo de letra. El método paint(Graphics g), se llama
automáticamente cuando termina la ejecución de start(), recibe el contexto gráfico, si no se
redefine dibuja el marco de color gris; en este ejemplo se ha redefinido con el fin de crear
un font (tipo de letra y tamaño) y escribir una cadena con ese tipo de letra.
A continuación se escribe la clase y un documento html.
 Clase ParamApplet.java
import java.awt.*;
import javax.swing.*;
public class ParamApplet extends JApplet
{
private String titular;
private String tipoLetra;
private int tam;
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
20
Clase ParamApplet.java
public void init()
public void paint(Graphics g)
{
{
titular = getParameter("TITULAR");
Font fuente;
if (titular == null)
fuente = new Font(tipoLetra,
titular = "Lili Vanesa";
Font.ITALIC, tam);
tipoLetra = getParameter("FUENTE");
g.setFont(fuente);
if (tipoLetra == null)
g.drawString(titular, 20, 20);
tipoLetra = "courier new";
String t = getParameter("SIZE");
if (t == null) t = "11";
tam = Integer.parseInt(t);
}
}
}
public void start()
{
tam++;
}
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
21
Documento HTML ParamApplet.html
<HTML>
<HEAD>
<TITLE>Applet HTML Page</TITLE>
</HEAD>
<BODY>
<H3><HR WIDTH="100%">Applet HTML Page<HR WIDTH="100%"></H3>
<P>
<APPLET codebase="file:/C:/ignacio/JAVA/Ejercicios/ParamApplet/build/classes/"
code="ParamApplet.class" width=350 height=200>
<PARAM NAME="TITULAR" VALUE="Paloma Tristan"/>
<PARAM NAME="FUENTE" VALUE="Binner Gothic"/>
<PARAM NAME="SIZE" VALUE="18"/>
</APPLET>
</P>
<HR WIDTH="100%"><FONT SIZE=-1><I>Generated by NetBeans IDE</I></FONT>
</BODY>
</HTML>
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
22
VISUALIZACÍON DE UN APPLET

El navegador, una vez que carga un applet, llama al método init(), que inicializa la
ejecución. Una vez que se completa el método init(), el navegador llama al método
start(). Este método es llamado cada vez que se hace visible el applet.

Después de que comience la ejecución del método start() se dibuja el applet, para lo
cual se llama automáticamente a paint() (void paint(Graphics g)) pasando el
contexto gráfico. Por defecto, dibuja una ventana de color gris.

Cada vez que se vuelve a visualizar el applet, se llama a start() y también a paint().

Los programadores redefinen el método paint() para realizar los dibujos requeridos con
el contexto gráfico que se recibe como parámetro.

El método repaint() se utiliza para notificar que el applet se vuelva a dibujar. Llamando
a repaint() se tiene la certeza de que se va a ejecutar paint(). repaint() llama
automáticamente a update() y le pasa el contexto gráfico. update() borra cualquier
dibujo que hubiera en la pantalla y llama a paint(), que de esta forma consigue el
contexto gráfico para realizar dibujos, ....

Los métodos paint(), repaint() y update() están definidos en la clase base
Component, y por ello heredados por la clase applet.
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
23
CLASE Graphics

La clase Graphics (java.awt) es una clase abstracta que proporciona el contexto
gráfico. La clase dispone de métodos para dibujar todo tipo de elementos.

Graphics al ser clase abstracta no se puede instanciar. El contexto gráfico se obtiene a
través de los métodos paint(Graphics g) y update(Graphics g) de la clase Component.

Métodos de dibujo de Graphics:
void drawString(String cad, int x, int y);
(x,y) coordenadas de origen
void drawLine(int x1, int y1, int x2, int y2);
dibuja una línea
void drawRect(int x, int y, int ancho, int alto); dibuja rectángulo
void fillRect(int x, int y, int ancho, int alto); llena rectángulo con colora actual
void fillRoundRect(int x, int y, int ancho, int alto,
int arcoAncho, int arcoAlto);
llena rectángulo redondeado
void drawOval(int x, int y, int ancho, int alto); dibuja elipse
void drawArc(int x, int y, int ancho, int alto,
int anguloInicio, int anguloArco);
dibuja arco
boolean drawImage(Image m, int x, int y, ImageObserver b);
...

Graphics2D es una subclase de Graphics que se utiliza para dibujar formas en java 2D.
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
24
EJEMPLO de contexto gráfico en un applet

Se construye un applet elemental, con el fin de mostrar cómo se visualizan los applet,s.
El método init() pone un color inicial de fondo e inicializa un contador. El método
start() incrementa el mismo contador y cambia el color del fondo. El método paint()
se redefine con el fin de dibujar un rectángulo cuyo tamaño depende del contador, y una
figura oval (drawOval()). El método stop() muestra por consola el valor del contador y
lo incrementa. Por último, el método destroy muestra en la consola el valor final del
contador.
El seguimiento de los contadores y de los dibujos deben clarificar el ciclo de vida y la
visualización de un applet.

GraficoApplet.java
import java.awt.*;
import javax.swing.*;
public class GraficoApplet extends JApplet
{
Color color;
int cont= 0;
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
25
GraficoApplet.java (II)

public void init()
public void stop()
{
{
System.out.println(" Contador = " +
// lightGray
(++cont));
color = new Color(192, 192, 192);
setBackground(color);
}
cont++;
public void paint(Graphics g)
{
}
g.drawRect(0+cont,0+cont, 20+2*cont,
public void start()
40+3*cont);
{
g.drawOval(0+cont,0+cont, 20+2*cont,
if (cont % 3 == 0)
40+3*cont);
color = Color.BLUE;
}
else if (cont % 3 == 1)
public void destroy()
color = Color.RED;
{
else
System.out.println (" Fin del applet,
color = Color.MAGENTA;
Contador = " + (++cont));
setBackground(color);
}
++cont;
}
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
}
26
URL
 URL es el acrónimo de Uniform Resource Locator. Una URL es la referencia a un recurso
(archivo de sonido, imagen, ...) que reside en la web. Por ejemplo:
http://www.upsam.net/iconoUpsam.Gif, indica al navegador que utilice el protocolo de
transferencia de hipertexto aplicándolo a la imagen del archivo iconoUpsam.Gig que se
encuentra en www.upsam.net
 La clase URL encapsula las referencias a recursos, es decir encapsula a url,s.
 Se puede crear un URL pasando una cadena con la url absoluta:
URL q = new URL(http://java.sun.com/index.html);
 La clase dispone de mas constructores; uno de ellos especifica la url relativa y el recurso:
URL tmp = new URL(urlRelativa, "horarios.inx");
 El método de la clase Applet, URL getCodeBase(), devuelve la url del directorio
desde el que se carga un applet.
 El método de la clase Applet, URL getDocumentBase(), devuelve la url de la página
html que contiene el applet.
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
27
IMAGENES Y SONIDOS
 Los applets pueden mostrar imágenes y reproducir sonidos. Los formatos de imagenes
reconocidos son los mas populares: GIF, JPEG o PNG. Los formatos de archivos de audio
reconocidos son: AU, WAV, MIDI o AIFF.
 Normalmente los archivos con estos recursos se especifican en forma de URL.
 La clase Applet dispone de métodos para cargar imagenes y sonidos. Por seguridad, los
archivos con las imagenes o sonidos, deben estar en el mismo servidor donde se
encuentra el código del applet. Los métodos son:
Image getImage(URL u, String nombre)
AudioClip get AudioClip (URL u, String nombre)
Ambos métodos devuelven null si no encuentran el recurso.
Ejemplo:
Image invierno = getImage(getCodeBase(),"imagenes/invierno.gif");
AudioClip son = getAudioClip(getCodeBase(),"cancion/invierno.au");
 El método de la clase Applet void play(URL u, String nombre ) , reproduce una
archivo de sonido sin cargarlo préviamente.
Ignacio Zahonero Martínez
Luis Joyanes Aguilar
28