Download java applets - MHProject v2.0 es MHP

Document related concepts
no text concepts found
Transcript
JAVA APPLETS
Silvia Larrayoz
Leire Urriza
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.1
INTRODUCCIÓN
•Un applet es un programa Java con la capacidad de ser incluido en una página
web y correr dentro de un navegador.
•Un applet es un panel que va dentro de una página Web
•No se ejecutan con conocimiento del usuario.
•Restricciones (para no violación de intimidad del visitante de la web:
•No pueden ejecutar programas locales
•Sólo pueden comunicarse con servidor de la web
•No pueden acceder al sistema de ficheros local
•No pueden sacar info de la máquina en la que corre (sólo S.O, versión de
la máquina virtual de Java...)
•No puede acceder al disco, la impresora o la red (a no ser de que haya sido
firmado digitalmente)
de Ingenieros de Telecomunicación - UPNA
•Recientemente  appletsE.T.S
firmados
para garantizar quien hizo el programa.
22/11/2005
.2
APLICACIÓN  APPLET
•Generar página HTML con código adecuado para cargar el applet
•Eliminar el método main  browser crea el applet
•Extender nuestra clase a JApplet en vez de a JFrame
•Eliminar llamadas a setSize y setTitle (HTML se encarga)
•Eliminar llamadas a addWindowListener()
•Reemplazar constructor por el método init()
•Hace pública la clase del applet
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.3
LAS CLASES APPLET Y JAPPLET
•Contenedor visual del estilo de Frame (JFrame) o Panel (JPanel)
según la implementación (AWT o Swing)
•Clase Applet  AWT
•Clase JApplet  Swing
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.4
CICLO DE VIDA DE UN APPLET (I)
•No tienen método public static void main(String[] args)
•Tienen 5 métodos:
•public void init()
•Constructor del applet (para su inicialización)
•Sólo se ejecuta una vez en la vida del applet
•public void start()
•Se ejecuta después de init()
•Cada vez que volvemos a la página del applet, cada vez
que haya que arrancarlo (reload, maximizar...)
22/11/2005
•Se programan tareas que es necesario volver a arrancar
E.T.S de Ingenieros de Telecomunicación - UPNA
cada vez que volvamos a cargar el applet (animaciones...).5
CICLO DE VIDA DE UN APPLET (II)
•public void stop()
•Para parar el applet cuando el navegador sale de la
página del applet.
•Para liberar recursos
•Las tareas que se detienen aquí son las que arranca el
método start()
•public void destroy()
•Cuando se cierra el navegador
•El applet deja de estar en la caché del navegador
22/11/2005
•La próxima vez que lo arranquemos será como la primera
vez
E.T.S de Ingenieros de Telecomunicación - UPNA
.6
CICLO DE VIDA DE UN APPLET (III)
•public void paint(Graphics g)
•Para escribir o pintar en el applet
•Se ejecuta cada vez que se necesita refrescar el applet
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.7
EJEMPLO DE CICLO DE VIDA
•Cargar el applet  init() + start()
•Salir y entrar a la página HTML  stop() + start()
•Cerrar navegador  stop() + destroy()
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.8
DESARROLLO DEL APPLET
•Definición del applet: Esta etapa es la más compleja y consiste en
definir una subclase de Applet o JApplet. En esta subclase se
redefinen algunos métodos de Applet como init.
•Escribir la o lás páginas Web (en HTML) que referencian el
applet: Consiste simplemente en agregar la etiqueta <applet ...> a
alguna página Web.
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.9
LA ETIQUETA <applet> (I)
<applet [name=?] [codebase=?] code=? [archive=?] width=?
height=? [align=?] [vspace=?] [hspace=?] [alt=?]>
[<param name=? value=?>]
Descripción:
name  nombre del applet
codebase  URL del applet (si es distinta a la del HTML)
code  nombre de la clase ppal del applet (paquete y extensión)
archive  archivos JAR o ZIP que contengan clases necesarias
que deban ser precargadas por el navegador
width  ancho del applet (en pixels)
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.10
LA ETIQUETA <applet> (II)
height  alto del applet (en pixels)
align  alineamiento del applet respecto al texto
vspace  espacio a dejar por encima y por debajo del applet en pixels
hspace  espacio a dejar por derecha e izquierda del applet en pixels
alt  texto a mostrar en caso de que el navegador no sea capaz de mostrar el
applet
<param> para pasar parámetros al applet desde el exterior
•2 métodos para acceder a los parámetros:
•public String getParameter(String name);
•public String[][] getParameterInfo();
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.11
EJEMPLO (Calculadora) (I)
•Ejemplo 18a del Java Hispano (conversión aplicación  applet)
package org.javahispano.practica17a;
import java.awt.BorderLayout;
import java.awt.Color;
18
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
Hay que hacer que nuestra clase
import java.awt.event.KeyListener;
extienda a JApplet en vez de a
import javax.swing.JApplet;
JFrame
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class Calculadora extends JFrame implements ActionListener,KeyListener {
private JTextField t=null;
private int oper1=0;
private int oper2=0;
private String command=null;
private boolean sw=true;
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.12
EJEMPLO (Calculadora) (II)
public Calculadora() {
this.setTitle(“Calculadora”);
this.addWindowListener(newWindowAdapter(){
public void windowClosing(WindowEvent ev) {
System.exit(0);
}
Sobraría porque un applet no se puede
}
cerrar, es el navegador el encargado de
);
inicializarlo y cerrarlo
this.getContentPane().setLayout(new BorderLayout()) ;
t=new JTextField(0);
t.setBackground(Color.yellow);
t.setHorizontalAlignment(SwingConstants.RIGHT);
t.addKeyListener(this);
JPanel aux=new JPanel();
aux.setLayout(new GridLayout(3,4));
22/11/2005
JButton b=null;
b= new JButton("1");
b.addActionListener(this);
aux.add(b);
b= new JButton("2");
b.addActionListener(this);
aux.add(b);
E.T.S de Ingenieros de Telecomunicación - UPNA
b= new JButton("3");
.13
EJEMPLO (Calculadora) (III)
b.addActionListener(this);
aux.add(b);
b= new JButton("+");
b.addActionListener(this);
aux.add(b);
b= new JButton("4");
b.addActionListener(this);
aux.add(b);
b= new JButton("5");
b.addActionListener(this);
aux.add(b);
b= new JButton("6");
b.addActionListener(this);
aux.add(b);
b= new JButton("-");
b.addActionListener(this);
aux.add(b);
b= new JButton("7");
b.addActionListener(this);
aux.add(b);
b= new JButton("8");
b.addActionListener(this);
aux.add(b);
b= new JButton("9");
b.addActionListener(this);
aux.add(b);
b= new JButton("=");
b.addActionListener(this);
aux.add(b);
22/11/2005
}
this.getContentPane().add(t,BorderLayout.NORTH);
this.getContentPane().add(aux,BorderLayout.CENTER);
E.T.S de Ingenieros de Telecomunicación - UPNA
.14
EJEMPLO (Calculadora) (IV)
//Se ha producido un ActionEvent
public void actionPerformed(ActionEvent ev){
String aux=((JButton)ev.getSource()).getText();
if(aux.equals("+")||aux.equals("-")) {
command=aux;
oper1=Integer.parseInt(t.getText());
sw=true;}
else if(aux.equals("=")) {
oper2=Integer.parseInt(t.getText());
if(command.equals("+")) {
t.setText(new Integer(oper1+oper2).toString());
oper1=oper1+oper2;
// permite teclear un numero y “="(repitiendo el ultimo
operador)}
else {
t.setText(new Integer(oper1-oper2).toString());
oper1=oper1-oper2;
// permite teclear un numero y "="(repitiendo el ultimo
operador)
}
sw=true;
}
else {
if(sw) {
t.setText(aux);
sw=false;
}
else
t.setText(t.getText()+ aux);}}
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.15
EJEMPLO (Calculadora) (V)
//Se ha producido un KeyEvent de tipo keyPressed
public void keyPressed(KeyEvent ev){
}
//Se ha producido un KeyEvent de tipo keyReleased
public void keyReleased(KeyEvent ev){
char tmp=ev.getKeyChar();
if(!Character.isDigit(tmp)){
t.setText(t.getText().substring(0,t.getText().length()-1));
t.setCaretPosition(t.getText().length());
}
Eliminamos el método main porque suele
}
ser código para crear objeto de tipo frame.
En nuestro caso será el navegador el
//Se ha producido un KeyEvent de tipo keyTyped
encargado de crear nuestro objeto tipo
public void keyTyped(KeyEvent ev){
applet
}
}
package org.javahispano.practica17a;
public class Practica17 {
public static void main(String[] args){
Calculadora c=new Calculadora();
c.pack();
c.setVisible(true);}}
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.16
EJEMPLO (Calculadora) (VI)
Ejecutando el código (Run As Java Applet) se obtiene:
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.17
EJEMPLO (Calculadora) (VI)
Para probarlo en un navegador…
<HTML>
<HEAD>
<TITLE> Práctica 18a </TITLE>
</HEAD>
<BODY>
<CENTER>
<H1> Práctica 18a: Calculadora </H1>
<BR/>
<APPLET code=”org.javahispano.practica18a.Calculadora” width=”170”
paquete
clase
height=”150”>
</APPLET>
</CENTER>
</BODY>
</HTML>
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.18
BIBLIOGRAFÍA
•www.javahispano.org
•www.javasun.com (API Specifications y seleccionar versión Java)
•Piensa en Java (Segunda edición) Bruce Eckel
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.19