Está en la página 1de 11

Aplicaciones frente a applets

Ambas descienden de la clase Container, por lo que tanto


los componentes, como los administradores de disposición
Curso de Java y el manejo de eventos son iguales para ambas clases.

A las aplicaciones las llama el intérprete de Java


y a los applets los llama el navegador.

Applets

El lenguaje Java — Tema 9 — Applets


Luis Hernández Yáñez
Curso de Java Tema 9 – Applets – 1
Carlos Cervigón Rückauer

Applets Qué es un applet

Una pequeña aplicación


Com putadoralocal Se ejecuta en un explorador web
Es subclase de java.applet.Applet, que a su vez es una subclase de
Panel.
Código fuente Com pilador
BytecodeJava
Java Java

java.lang.Object
|+----java.awt.Component
| +----java.awt.Container
| +----java.awt.Panel
Com putadora N avegadorW eb
| +----java.applet.Applet
rem ota
Intérprete javax.swing.JApplet
Java

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 2 Curso de Java Tema 9 – Applets – 3
Carlos Cervigón Rückauer Carlos Cervigón Rückauer
Applet mínimo con Swing (JApplet) Creación de applets

//MiApplet.java
Los applets consisten en definir una subclase de JApplet.
import java.swing.*;
class MiApplet extends JApplet { }
En esta subclase se redefinen algunos métodos de Applet
Anchura y altura (o heredados) como init() o start().
en píxeles
//MiApplet.html
<HTML> import javax.swing.*;
<HEAD><TITLE>Applet mínima</TITLE> </HEAD>
public class MiApplet extends JApplet {
<BODY>
<APPLET CODE="MiApplet.class" WIDTH=100 HEIGHT=50>
</APPLET> public void paint(Graphics g) {
</BODY> g.drawString("mi primer Applet", 25, 50);
</HTML> }
}

Al compilar esta clase java obtengo MiApplet.class, que se puede


cargar desde una página HTML.
AppletViewer Navegador ¿Cómo se carga el applet en la página web?

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 4 Curso de Java Tema 9 – Applets – 5
Carlos Cervigón Rückauer Carlos Cervigón Rückauer

Creación de applets Fundamentos de un applet

Se escribe la página Web (en HTML) que referencia el applet.


Consiste simplemente en agregar la etiqueta <APPLET> a Un applet es un panel dentro de una página web.
alguna página Web. Un applet no necesita definir main(), es el navegador el que crea
<HTML> el applet.
<HEAD>
<TITLE>Ejemplo de applet básico</TITLE> Los applets tienen un comportamiento implícito básico. Basta con
</HEAD> redefinir una serie de métodos del applet para adaptarlo a nuestras
<BODY> necesidades.
<APPLET CODE=“MiApplet.class” WIDTH=200 HEIGHT=100>
</APPLET> Un applet puede incluir botones, áreas de texto, listas, etcétera,
</BODY> como si fuese una aplicación (AWT o Swing).
</HTML> En el ejemplo anterior sólo hemos redefinido el comportamiento
del applet, modificando el método paint().
¿Cómo redefinimos el comportamiento de un applet?

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 6 Curso de Java Tema 9 – Applets – 7
Carlos Cervigón Rückauer Carlos Cervigón Rückauer
Esquema de applet con swing Ejemplo

import javax.swing.* import javax.swing.*;


import java.awt; import java.awt.*;

public class MiApplet0 extends JApplet


public class MiApplet0 extends JApplet { {
Container panel;
JLabel etiqueta;
// constantes y componentes (atributos)
public void init(){
public void init() { // configurar componentes;
etiqueta = new JLabel("Mi primer Applet Swing");
panel = this.getContentPane();
// configurar componentes panel.add(etiqueta);
// configurar layout; // configurar layout;
FlowLayout milayout = new FlowLayout();
// configurar Manejadores Eventos; panel.setLayout(milayout);
...
} }
}
}

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 8 Curso de Java Tema 9 – Applets – 9
Carlos Cervigón Rückauer Carlos Cervigón Rückauer

Conversor Euros-Pesetas Ciclo de vida de un applet

import javax.swing.*;
import java.awt.*; La clase Applet dispone de varios métodos sin código dentro,
a los que llama en diversas fases de su ciclo de vida (al crearse
public class Applet02 extends Japplet {
Container panel;
el applet, al redibujarse, al destruirse, etcétera).
JTextField cantidad; Si deseamos que nuestro applet haga cosas especiales en esos
JButton boton1,boton2; momentos deberemos sobreescribir esos métodos. Son éstos:
public void init() {
boton1 = new JButton("A Euros "); public class MiApplet extends JApplet {
boton2 = new JButton("A Pesetas");
public void init() { ... }
cantidad = new JTextField(18);
panel = this.getContentPane(); public void start() {... }
panel.add(cantidad); public void stop() { ... }
panel.add(boton1);
panel.add(boton2); public void destroy() { ... }
panel.setLayout(new FlowLayout()); //otros
}
} }
Añadir la respuesta a los botones

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 10 Curso de Java Tema 9 – Applets – 11
Carlos Cervigón Rückauer Carlos Cervigón Rückauer
Ciclo de vida de un applet Ciclo de vida de un applet

void init()
9 Este método se llama al crearse el applet y sólo se ejecuta
init(): Para inicializar el applet cada vez que se carga esa vez, y cada vez que se vuelve a cargar.
(o vuelve a cargar).
9 Se suele utilizar para inicializar variables globales y
los elementos del applet.
start(): Para iniciar la ejecución del applet, cuando se ha
9 Contiene el código que tendría un constructor.
cargado el applet o el usuario revisita la página del applet.
void start()
stop(): Para detener la ejecución del applet, al salir de la 9 Se invoca tras producirse una carga del applet con init().
página o del explorador.
9 ... y al revisitar una página que contiene un applet
previamente cargado.
destroy(): Para realizar una limpieza final antes de abandonar. 9 Inicia las tareas que debe realizar el applet.

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 12 Curso de Java Tema 9 – Applets – 13
Carlos Cervigón Rückauer Carlos Cervigón Rückauer

Ciclo de vida de un applet Ciclo de vida del applet

void stop() Cuando se produce la carga de un applet:


9 Suspende la ejecución del applet. Se invoca al abandonar Se crea un ejemplar de la clase (subclase de Applet).
la página que contiene el applet (al cargar una página El applet se inicializa (invocación de init()).
diferente). El applet comienza su ejecución (start()).
9 También al cerrar el navegador o minimizar la ventana
del applet.
Mientras se ejecuta el applet, el explorador registra los eventos
que se van sucediendo.
void destroy()
9 Método llamado al destruirse el applet. Normalmente no se Al abandonar la página que contiene el applet:

suele redefinir. El applet se detiene (stop()).


Al volver a la página: de nuevo start().
Idem al minimizar/restaurar o redimensionar.

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 14 Curso de Java Tema 9 – Applets – 15
Carlos Cervigón Rückauer Carlos Cervigón Rückauer
La etiqueta <APPLET> Ejemplo: llamadas a paint()

<APPLET import javax.swing.*;


code=classfilename.class import java.awt.Graphics;

width=anchura en pixeles
public class Applet03 extends JApplet {
height=altura en pixeles
private int x = 0; // Contador de llamadas a paint()
[archive=archivefile]
public void init() { }
[codebase=applet_url]
public void paint(Graphics g) {
[vspace=vertical_margin] x = x + 1; // Incremento cada vez que llamo a paint()
[hspace=horizontal_margin] g.drawString("llamadas a paint = " + x, 10, 80);
[align=applet_alignment] }
[alt=alternative_text] }

>
<PARAM name=param_name1 value=param_value1>
</APPLET>

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 16 Curso de Java Tema 9 – Applets – 17
Carlos Cervigón Rückauer Carlos Cervigón Rückauer

Ejemplo: llamadas a paintComponent() Ciclo de vida : MiApplet03

public class Applet04 extends JApplet { public class Applet05 extends JApplet {
Container panel; int numInit = 0; int numStart = 0;
int numStop = 0; int numDestroy = 0;
private int x = 0;//atributo contador de llamadas a paint
int numPaint = 0;
public void init(){ public void init() { ++numInit; }
panel = this.getContentPane(); public void start(){ ++numStart; }
public void stop() { ++numStop; }
panel.add(new MiPanel());
public void destroy() { ++numDestroy; }
}
public void paint(Graphics g) {
class MiPanel extends JPanel{ ++numPaint;
g.drawString("Invocaciones a init(): " + numInit, 25, 25);
public void paintComponent(Graphics g) { g.drawString("Invocaciones a start(): " + numStart, 25,
super.paintComponent(g); 50);
x = x + 1; g.drawString("Invocaciones a stop(): " + numStop, 25, 75);
g.drawString("Invocaciones a destroy(): " +numDestroy, 25,
g.drawString("Llamadas a paintComponent = " + x, 10, 80); 100);
} g.drawString("Invocaciones a paint(): " +numPaint, 25,
} 125);
}
}
}

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 18 Curso de Java Tema 9 – Applets – 19
Carlos Cervigón Rückauer Carlos Cervigón Rückauer
Cargar imágenes Paso de parámetros al applet
public class Applet06 extends JApplet { public class Param extends JApplet {
Container panel;
private Image img; public void paintComponent(Graphics g) {
public void init(){ String cadena = this.getParameter("mensaje");
panel = this.getContentPane();
g.drawString(cadena, 50, 25);
panel.add(new MiPanel());
img = getImage(getCodeBase(),"taza.jpg"); }
} }
Devuelve la URL donde está el applet (excluyendo el nombre del fichero).
class MiPanel extends JPanel{ <BODY>
public void paintComponent(Graphics g) {
<APPLET code= "Param.class" width="300" height="50">
super.paintComponent(g);
g.drawImage(img, 205, 5, 170, 190, Color.yellow, this); <PARAM name= mensaje value="Buenos días">
g.drawImage(img, 110, 75, this); </APPLET>
g.setFont(new Font("Helvetica", Font.PLAIN, 16));
g.setColor(Color.yellow); </BODY>
g.drawString("U.C.M.", 70, 200);
}
}
}

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 20 Curso de Java Tema 9 – Applets – 21
Carlos Cervigón Rückauer Carlos Cervigón Rückauer

Paso de parámetros al applet Paso de parámetros al applet

Mostrar un mensaje en una determinada posición. public class Applet07 extends JApplet {
El mensaje y la posición X,Y se obtienen del código HTML.
private String mensaje;
private int x = 20; // Coordenada x
<APPLET private int y = 20; // Coordenada y
code = "Applet07.class"
public void init() {
width = 200 MiPanel p = new MiPanel();
height = 200> Container pan = getContentPane();
<PARAM name = mensaje value = "Hola a todos"> pan.add(p);
}
<PARAM name = X value = 20>
<PARAM name = Y value = 70>
</APPLET>

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 22 Curso de Java Tema 9 – Applets – 23
Carlos Cervigón Rückauer Carlos Cervigón Rückauer
Paso de parámetros al applet Layout nulo

Permite utilizar el método setBounds() de Component para


posicionar los elementos de forma absoluta.
class MiPanel extends JPanel {
public class Applet08 extends JApplet {
public void paintComponent (Graphics g) { List lista;
super.paintComponent(g); Button botonOK;
Container panel;
setBackground(Color.blue);
mensaje = getParameter("mensaje"); public void init() {
panel = getContentPane();
x = Integer.parseInt(getParameter("X")); panel.setLayout(null);
y = Integer.parseInt(getParameter("Y")); lista = new List(8,false );
lista.setBounds(1, 1, 150, 150);
g.drawString(mensaje, x, y); panel.add(lista );
} botonOK = new Button("OKKKK");
botonOK.setBounds(180, 220,
} 160, 130);
} panel.add(botonOK);
}
}

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 24 Curso de Java Tema 9 – Applets – 25
Carlos Cervigón Rückauer Carlos Cervigón Rückauer

Ejemplo de dibujo Ejemplo de dibujo

public class Applet09 extends JApplet { class Oyente1 implements MouseMotionListener {


Container panel;
public void mouseMoved(MouseEvent e) { }
public void init() {
panel = getContentPane(); public void mouseDragged(MouseEvent e) {
panel.add(new Lienzo(), g = getGraphics();
BorderLayout.CENTER); if(e.isMetaDown()) {
} g.setColor(getBackground());
g.fillOval(e.getX() - (CIRCULO / 2),
class Lienzo extends JPanel { e.getY() - (CIRCULO / 2), CIRCULO, CIRCULO);
final int CIRCULO = 20; }
private Point inicio = new Point(0, 0); else {
private Graphics g; g.setColor(Color.black);
public Lienzo() { g.drawLine(inicio.x, inicio.y,e.getX(), e.getY());
this.addMouseMotionListener(new Oyente1()); }
this.addMouseListener(new Oyente2()); inicio.move(e.getX(), e.getY());
} g.dispose();
}
// Ahora creamos los oyentes como clases internas del lienzo }

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 26 Curso de Java Tema 9 – Applets – 27
Carlos Cervigón Rückauer Carlos Cervigón Rückauer
Ejemplo de dibujo Tamaño del applet

class Oyente2 implements MouseListener {


public void mouseClicked(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
public void mouseMoved(MouseEvent e) { }
public void mousePressed(MouseEvent e) { import javax.swing.*;
inicio.move(e.getX(), e.getY());
import java.awt.*;
}
} public class Applet10 extends JApplet{
}
} public void paint( Graphics g ) {
Dimension size = getSize();
g.drawString( "altura => " + size.height, 30, 30 );
g.drawString( "anchura => " + size.width, 30, 50 );
g.drawRect( 0, 0, size.width-1, size.height-1);
}
}

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 28 Curso de Java Tema 9 – Applets – 29
Carlos Cervigón Rückauer Carlos Cervigón Rückauer

Comunicación con el navegador Ejemplo

La interface AppletContext proporciona capacidad para que import javax.swing.*;


el applet le pida al navegador que realice ciertas tareas. import java.awt.*;
import java.net.*;
AppletContext import java.applet.*;
9 getApplet(String)
public class Applet11 extends JApplet {
9 getApplets() public void paint (Graphics g){
g.drawString("Abriendo página ....", 30, 30 );
9 getAudioClip(URL)
}
9 getImage(URL) public void init( ) {
try {
9 showDocument(URL) URL miwww = new URL("http://www.ucm.es");
_self
AppletContext miContexto = getAppletContext();
9 showDocument(URL, String) _parent
miContexto.showDocument(miwww, "_self");
_top
9 showStatus(String) }
catch (MalformedURLException err) { _blank
System.out.println("Escribe bien, jopé!");
}
El applet puede pedir al navegador que muestre páginas. }
}

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 30 Curso de Java Tema 9 – Applets – 31
Carlos Cervigón Rückauer Carlos Cervigón Rückauer
Ejemplo Más elementos de swing
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.applet.*;

public class Applet12 extends JApplet {


public void init(){
Container p = getContentPane();
p.setLayout(new FlowLayout());
p.add(new JToggleButton("ToggleButton"));
p.add(new JRadioButton("RadioButton"));
p.add(new JCheckBox("CheckBox"));
JPanel jp2 = new JPanel();
JCheckBox jcb1, jcb2, jcb3;
jcb1 = new JCheckBox("1");
jcb2 = new JCheckBox("2");
jcb3 = new JCheckBox("3");
ButtonGroup bg = new ButtonGroup();
jp2.setBorder(new TitledBorder("Grupo de botones"));
jp2.setLayout(new FlowLayout());
jp2.add(jcb1); bg.add(jcb1);

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 32 Curso de Java Tema 9 – Applets – 33
Carlos Cervigón Rückauer Carlos Cervigón Rückauer

Más elementos de swing JTabbedPane

jp2.add(jcb2); bg.add(jcb2); Paneles con fichas y pestañas.


jp2.add(jcb3); bg.add(jcb3);
p.add(jp2);
Image im = getImage(getCodeBase(), "taza.jpg");
Icon ics = new ImageIcon(im);
JButton jbicon = new JButton("Boton",ics);
p.add(jbicon);
jbicon.setToolTipText("Esto es un botón con imagen
incrustada");
p.add(new JScrollBar()); p.add(new JSlider()); public class Applet13
} extends JApplet {
} private JTabbedPane jtpFigures = new JTabbedPane();

public void init() {


jtpFigures.add(new FigurePanel(1), "Cuadrado");
jtpFigures.add(new FigurePanel(2), "Rectangulo");
jtpFigures.add(new FigurePanel(3), "Circulo");
this.getContentPane().add(jtpFigures, BorderLayout.CENTER);
}
}

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 34 Curso de Java Tema 9 – Applets – 35
Carlos Cervigón Rückauer Carlos Cervigón Rückauer
Ejemplo Archivos .jar

class PanelFiguras extends JPanel {


private int figureType = 1;
El formato de archivos JAR permite empaquetar varios archivos en
public PanelFiguras(int figureType) { uno sólo. Normalmente un archivo JAR contiene los archivos
this.figureType = figureType; } de clases y todo lo asociado con los applets y aplicaciones.
public void paintComponent(Graphics g) {
super.paintComponent(g);
Esto incluye archivos de imagen, sonido, documentos html, etcétera.
int width = getSize().width;
int height = getSize().height;
int side = (int)(0.80 * Math.min(width, height)); Para crear archivos .jar:
switch (figureType) {
case 1:
g.drawRect((width - side)/2,(height - side)/2, side,side); % jar cf MiApplet.jar *.class
break;
case 2:
g.drawRect((int)(0.1 * width), (int)(0.1 * height), Para llamar a un applet empaquetado en un archivo JAR:
(int)(0.8 * width), (int)(0.8 * height));
break;
case 3:
g.drawOval((width-side)/2, (height-side)/2, side, side);
<APPLET
break; CODE = Ejemplo01.class WIDTH = 200 HEIGHT = 100
}
}
ARCHIVES="MiAppplet.jar">
} </APPLET>

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 36 Curso de Java Tema 9 – Applets – 37
Carlos Cervigón Rückauer Carlos Cervigón Rückauer

Órdenes básicas Ejemplo

M enu
Para crear un archivo JAR: jar cf jar-file archivos
Para ver el contenido de un archivo JAR: jar tf jar-file M enu.class audio im ages

Para extraer el contenido de un archivo JAR: jar xf jar-file


Los subdirectorios audio e images contienen archivos GIF y de
Para ejecutar una aplicación empaquetada en un archivo JAR:
sonido utilizados por el applet.
java -jarjar-file Para empaquetar esta demo en un sólo archivo JAR llamado
Para llamar a un applet empaquetado en un archivo JAR: Menu.jar, tenemos que ejecutar esta orden en el directorio Menu:
<APPLET code=AppletClass.class jarcvfM enu.jarM enu.class audio im ages

archive=“NombreJarFile.jar" Para ejecutar:


<APPLET code=M enu.class archive=“M enu.jar"w idth=120
width=ancho height=alto> height=120> </APPLET>
</APPLET>

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 38 Curso de Java Tema 9 – Applets – 39
Carlos Cervigón Rückauer Carlos Cervigón Rückauer
Manifiesto de un archivo .jar Manifiesto de un archivo .jar

Los archivos JAR pueden soportar muchas características, como Si hemos empaquetado una aplicación en un archivo JAR , tenemos
firma electrónica, control de versiones, sellado de paquetes, que indicar qué clase es la que tiene el método main().
las extensiones, etcétera. Esta información se indica en la cabecera Main-Class :
Toda la información útil se encuentra en el manifiesto de Main-Class: classname
los archivos JAR. El manifiesto es un archivos especial que puede
contener información sobre los otros archivos empaquetados en donde classname es el nombre de la clase con el método main().
el archivo JAR. Ejemplo (prueba.txt): Main-Class: Ejercicio4
Siempre que se crea un archivo JAR, automáticamente se asocia // Creamos el jar: jar cvf kiko.jar *
un archivo manifiesto que se puede modificar.
// Actualizamos el manifiesto:
Por ejemplo:
jar cmf prueba.txt kiko.jar Ejercicio4
Manifest-Version: 1.0
// Lo ejecutamos: java –jar kiko.jar
Created-By: Manifest JDK1.2

Luis Hernández Yáñez Luis Hernández Yáñez


Curso de Java Tema 9 – Applets – 40 Curso de Java Tema 9 – Applets – 41
Carlos Cervigón Rückauer Carlos Cervigón Rückauer

También podría gustarte