Aplicaciones frente a applets

Curso de Java

Ambas descienden de la clase Container, por lo que tanto los componentes, como los administradores de disposición 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
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 9 – Applets – 1

Applets
Com put al ador ocal Códi f e go uent J ava Com piador l J ava

Qué es un applet
Una pequeña aplicación Se ejecuta en un explorador web Es subclase de java.applet.Applet, que a su vez es una subclase de
Panel.

Byt ecodeJ ava

java.lang.Object |+----java.awt.Component | +----java.awt.Container | +----java.awt.Panel | +----java.applet.Applet javax.swing.JApplet

Com put a ador r ot em a

N avegadorW eb I ér et nt pr e J ava

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 2

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 3

Applet mínimo con Swing (JApplet)
//MiApplet.java import java.swing.*; class MiApplet extends JApplet { }

Creación de applets
Los applets consisten en definir una subclase de JApplet. En esta subclase se redefinen algunos métodos de Applet (o heredados) como init() o start().
import javax.swing.*; public class MiApplet extends JApplet { public void paint(Graphics g) { g.drawString("mi primer Applet", 25, 50); }
}

//MiApplet.html <HTML> <HEAD><TITLE>Applet mínima</TITLE> </HEAD> <BODY> <APPLET CODE="MiApplet.class" WIDTH=100 HEIGHT=50> </APPLET> </BODY> </HTML>

Anchura y altura en píxeles

Al compilar esta clase java obtengo MiApplet.class, que se puede cargar desde una página HTML.
AppletViewer
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer

Navegador
Tema 9 – Applets – 4

¿Cómo se carga el applet en la página web?
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 9 – Applets – 5

Creación de applets
Se escribe la página Web (en HTML) que referencia el applet. Consiste simplemente en agregar la etiqueta <APPLET> a alguna página Web.
<HTML> <HEAD> <TITLE>Ejemplo de applet básico</TITLE> </HEAD> <BODY> <APPLET CODE=“MiApplet.class” WIDTH=200 HEIGHT=100> </APPLET> </BODY> </HTML>

Fundamentos de un applet

Un applet es un panel dentro de una página web. Un applet no necesita definir main(), es el navegador el que crea el applet. Los applets tienen un comportamiento implícito básico. Basta con redefinir una serie de métodos del applet para adaptarlo a nuestras necesidades. Un applet puede incluir botones, áreas de texto, listas, etcétera, como si fuese una aplicación (AWT o Swing). 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?

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 6

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 7

Esquema de applet con swing
import javax.swing.* import java.awt; public class MiApplet0 extends JApplet { // constantes y componentes (atributos) public void init() { // configurar componentes // configurar layout; // configurar Manejadores Eventos; } }
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 9 – Applets – 8

Ejemplo
import javax.swing.*; import java.awt.*; public class MiApplet0 extends JApplet { Container panel; JLabel etiqueta; public void init(){ // configurar componentes; etiqueta = new JLabel("Mi primer Applet Swing"); panel = this.getContentPane(); panel.add(etiqueta); // configurar layout; FlowLayout milayout = new FlowLayout(); panel.setLayout(milayout); ... } }

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 9

Conversor Euros-Pesetas
import javax.swing.*; import java.awt.*; public class Applet02 extends Japplet { Container panel; JTextField cantidad; JButton boton1,boton2; public void init() { boton1 = new JButton("A Euros "); boton2 = new JButton("A Pesetas"); cantidad = new JTextField(18); panel = this.getContentPane(); panel.add(cantidad); panel.add(boton1); panel.add(boton2); panel.setLayout(new FlowLayout()); } }

Ciclo de vida de un applet
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 el applet, al redibujarse, al destruirse, etcétera). Si deseamos que nuestro applet haga cosas especiales en esos momentos deberemos sobreescribir esos métodos. Son éstos:
public class MiApplet extends JApplet { public void init() { ... } public void start() {... } public void stop() { ... } public void destroy() { ... } //otros }

Añadir la respuesta a los botones
Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 9 – Applets – 10

Curso de Java

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 11

Ciclo de vida de un applet

Ciclo de vida de un applet void init()

init(): Para inicializar el applet cada vez que se carga (o vuelve a cargar). start(): Para iniciar la ejecución del applet, cuando se ha cargado el applet o el usuario revisita la página del applet. stop(): Para detener la ejecución del applet, al salir de la página o del explorador. destroy(): Para realizar una limpieza final antes de abandonar.

Este método se llama al crearse el applet y sólo se ejecuta esa vez, y cada vez que se vuelve a cargar. Se suele utilizar para inicializar variables globales y los elementos del applet. Contiene el código que tendría un constructor.

void start()
Se invoca tras producirse una carga del applet con init(). ... y al revisitar una página que contiene un applet previamente cargado. Inicia las tareas que debe realizar el applet.

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 12

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 13

Ciclo de vida de un applet void stop()
Suspende la ejecución del applet. Se invoca al abandonar la página que contiene el applet (al cargar una página diferente). También al cerrar el navegador o minimizar la ventana del applet.

Ciclo de vida del applet
Cuando se produce la carga de un applet: Se crea un ejemplar de la clase (subclase de Applet). El applet se inicializa (invocación de init()). El applet comienza su ejecución (start()). Mientras se ejecuta el applet, el explorador registra los eventos que se van sucediendo. Al abandonar la página que contiene el applet: El applet se detiene (stop()). Al volver a la página: de nuevo start().

void destroy()
Método llamado al destruirse el applet. Normalmente no se suele redefinir.

Idem al minimizar/restaurar o redimensionar.

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 14

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 15

La etiqueta <APPLET>
<APPLET code=classfilename.class width=anchura en pixeles height=altura en pixeles [archive=archivefile] [codebase=applet_url] [vspace=vertical_margin] [hspace=horizontal_margin] [align=applet_alignment] [alt=alternative_text] > <PARAM name=param_name1 value=param_value1> </APPLET>
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 9 – Applets – 16

Ejemplo: llamadas a paint()
import javax.swing.*; import java.awt.Graphics; public class Applet03 extends JApplet { private int x = 0; // Contador de llamadas a paint() public void init() { } public void paint(Graphics g) { x = x + 1; // Incremento cada vez que llamo a paint() g.drawString("llamadas a paint = " + x, 10, 80); } }

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 17

Ejemplo: llamadas a paintComponent()
public class Applet04 extends JApplet { Container panel; private int x = 0;//atributo contador de llamadas a paint public void init(){ panel = this.getContentPane(); panel.add(new MiPanel()); } class MiPanel extends JPanel{ public void paintComponent(Graphics g) { super.paintComponent(g); x = x + 1; g.drawString("Llamadas a paintComponent = " + x, 10, 80); } } }
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 9 – Applets – 18

Ciclo de vida : MiApplet03
public class Applet05 extends JApplet { int numInit = 0; int numStart = 0; int numStop = 0; int numDestroy = 0; int numPaint = 0; public void init() { ++numInit; } public void start(){ ++numStart; } public void stop() { ++numStop; } public void destroy() { ++numDestroy; } public void paint(Graphics g) { ++numPaint; g.drawString("Invocaciones a init(): " + numInit, 25, 25); g.drawString("Invocaciones a start(): " + numStart, 25, 50); g.drawString("Invocaciones a stop(): " + numStop, 25, 75); g.drawString("Invocaciones a destroy(): " +numDestroy, 25, 100); g.drawString("Invocaciones a paint(): " +numPaint, 25, 125); } }
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 9 – Applets – 19

Cargar imágenes
public class Applet06 extends JApplet { Container panel; private Image img; public void init(){ panel = this.getContentPane(); 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{ public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(img, 205, 5, 170, 190, Color.yellow, this); g.drawImage(img, 110, 75, this); g.setFont(new Font("Helvetica", Font.PLAIN, 16)); g.setColor(Color.yellow); g.drawString("U.C.M.", 70, 200); } } }
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 9 – Applets – 20

Paso de parámetros al applet
public class Param extends JApplet { public void paintComponent(Graphics g) { String cadena = this.getParameter("mensaje"); g.drawString(cadena, 50, 25); } } <BODY> <APPLET code= "Param.class" width="300" height="50"> <PARAM name= mensaje value="Buenos días"> </APPLET> </BODY>

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 21

Paso de parámetros al applet
Mostrar un mensaje en una determinada posición. El mensaje y la posición X,Y se obtienen del código HTML. <APPLET code = "Applet07.class" width = 200 height = 200> <PARAM name = mensaje value = "Hola a todos"> <PARAM name = X value = 20> <PARAM name = Y value = 70> </APPLET>

Paso de parámetros al applet
public class Applet07 extends JApplet { private String mensaje; private int x = 20; // Coordenada x private int y = 20; // Coordenada y public void init() { MiPanel p = new MiPanel(); Container pan = getContentPane(); pan.add(p); }

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 22

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 23

Paso de parámetros al applet

Layout nulo
Permite utilizar el método setBounds() de Component para posicionar los elementos de forma absoluta.
public class Applet08 extends JApplet { List lista; Button botonOK; Container panel; public void init() { panel = getContentPane(); panel.setLayout(null); lista = new List(8,false ); lista.setBounds(1, 1, 150, 150); panel.add(lista ); botonOK = new Button("OKKKK"); botonOK.setBounds(180, 220, 160, 130); panel.add(botonOK); } }

class MiPanel extends JPanel { public void paintComponent (Graphics g) { super.paintComponent(g); setBackground(Color.blue); mensaje = getParameter("mensaje"); x = Integer.parseInt(getParameter("X")); y = Integer.parseInt(getParameter("Y")); g.drawString(mensaje, x, y); } } }

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 24

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 25

Ejemplo de dibujo
public class Applet09 extends JApplet { Container panel; public void init() { panel = getContentPane(); panel.add(new Lienzo(), BorderLayout.CENTER); } class Lienzo extends JPanel { final int CIRCULO = 20; private Point inicio = new Point(0, 0); private Graphics g; public Lienzo() { this.addMouseMotionListener(new Oyente1()); this.addMouseListener(new Oyente2()); } // Ahora creamos los oyentes como clases internas del lienzo
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 9 – Applets – 26

Ejemplo de dibujo
class Oyente1 implements MouseMotionListener { public void mouseMoved(MouseEvent e) { } public void mouseDragged(MouseEvent e) { g = getGraphics(); if(e.isMetaDown()) { g.setColor(getBackground()); g.fillOval(e.getX() - (CIRCULO / 2), e.getY() - (CIRCULO / 2), CIRCULO, CIRCULO); } else { g.setColor(Color.black); g.drawLine(inicio.x, inicio.y,e.getX(), e.getY()); } inicio.move(e.getX(), e.getY()); g.dispose(); } }
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 9 – Applets – 27

Ejemplo de dibujo
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) { inicio.move(e.getX(), e.getY()); } } } }

Tamaño del applet

import javax.swing.*; 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); } }

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 28

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 29

Comunicación con el navegador
La interface AppletContext proporciona capacidad para que el applet le pida al navegador que realice ciertas tareas.
AppletContext

Ejemplo
import import import import javax.swing.*; java.awt.*; java.net.*; java.applet.*;

getApplet(String) getApplets() getAudioClip(URL) getImage(URL) showDocument(URL) showDocument(URL, String) showStatus(String)

El applet puede pedir al navegador que muestre páginas.
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 9 – Applets – 30

public class Applet11 extends JApplet { public void paint (Graphics g){ g.drawString("Abriendo página ....", 30, 30 ); } public void init( ) { try { URL miwww = new URL("http://www.ucm.es"); AppletContext miContexto = getAppletContext(); miContexto.showDocument(miwww, "_self"); } catch (MalformedURLException err) { System.out.println("Escribe bien, jopé!"); } } }
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer

_self _parent _top _blank

Tema 9 – Applets – 31

Ejemplo

Más elementos de swing
import import import import javax.swing.*; javax.swing.border.*; java.awt.*; 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);
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 9 – Applets – 32 Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 9 – Applets – 33

Más elementos de swing
jp2.add(jcb2); bg.add(jcb2); 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()); } }

JTabbedPane
Paneles con fichas y pestañas.

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); } }

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 34

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 35

Ejemplo
class PanelFiguras extends JPanel { private int figureType = 1; public PanelFiguras(int figureType) { this.figureType = figureType; } public void paintComponent(Graphics g) { super.paintComponent(g); int width = getSize().width; int height = getSize().height; int side = (int)(0.80 * Math.min(width, height)); switch (figureType) { case 1: g.drawRect((width - side)/2,(height - side)/2, side,side); break; case 2: g.drawRect((int)(0.1 * width), (int)(0.1 * height), (int)(0.8 * width), (int)(0.8 * height)); break; case 3: g.drawOval((width-side)/2, (height-side)/2, side, side); break; } } }
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 9 – Applets – 36

Archivos .jar
El formato de archivos JAR permite empaquetar varios archivos en uno sólo. Normalmente un archivo JAR contiene los archivos de clases y todo lo asociado con los applets y aplicaciones. Esto incluye archivos de imagen, sonido, documentos html, etcétera. Para crear archivos .jar:
% jar cf MiApplet.jar *.class

Para llamar a un applet empaquetado en un archivo JAR:
<APPLET CODE = Ejemplo01.class WIDTH = 200 HEIGHT = 100 ARCHIVES="MiAppplet.jar"> </APPLET>
Curso de Java Luis Hernández Yáñez Carlos Cervigón Rückauer Tema 9 – Applets – 37

Órdenes básicas

Ejemplo
M enu

Para crear un archivo JAR:

jar cf jar-file archivos jar tf jar-file M enu. ass cl audi o i ages m

Para ver el contenido de un archivo JAR:

Para extraer el contenido de un archivo JAR: jar xf jar-file Para ejecutar una aplicación empaquetada en un archivo JAR: j ava -arj -ie j ar fl Para llamar a un applet empaquetado en un archivo JAR: <APPLET code=AppletClass.class archive=“NombreJarFile.jar" width=ancho height=alto> </APPLET>

Los subdirectorios audio e images contienen archivos GIF y de sonido utilizados por el applet. Para empaquetar esta demo en un sólo archivo JAR llamado Menu.jar, tenemos que ejecutar esta orden en el directorio Menu: j arcvfM enu.arM enu. ass audi i ages j cl o m Para ejecutar: <APPLET code=M enu. ass ar ve=“ enu.ar w i h=120 cl chi M j " dt hei =120> </ ght APPLET>

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 38

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 39

Manifiesto de un archivo .jar

Manifiesto de un archivo .jar

Los archivos JAR pueden soportar muchas características, como firma electrónica, control de versiones, sellado de paquetes, las extensiones, etcétera. Toda la información útil se encuentra en el manifiesto de los archivos JAR. El manifiesto es un archivos especial que puede contener información sobre los otros archivos empaquetados en el archivo JAR. Siempre que se crea un archivo JAR, automáticamente se asocia un archivo manifiesto que se puede modificar. Por ejemplo: Manifest-Version: 1.0 Created-By: Manifest JDK1.2

Si hemos empaquetado una aplicación en un archivo JAR , tenemos que indicar qué clase es la que tiene el método main(). Esta información se indica en la cabecera Main-Class : Main-Class: classname donde classname es el nombre de la clase con el método main(). Ejemplo (prueba.txt): Main-Class: Ejercicio4 jar cvf kiko.jar * // Creamos el jar:

// Actualizamos el manifiesto: jar cmf prueba.txt kiko.jar Ejercicio4 // Lo ejecutamos: java –jar kiko.jar

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 40

Curso de Java

Luis Hernández Yáñez Carlos Cervigón Rückauer

Tema 9 – Applets – 41