HTMLpointHTMLpoint HTMLpoint.com


 ¿Qué es un aplique?



Un aplique no es más que una aplicación Java que se encuentra en web. El aplique presenta unas diferencias con las aplicaciones porque no tienen ningún main, y son clases que tienen el mismo nombre que el del archivo que las incluye, que amplían la clase Applet del paquete java.applet.
Incluso para los apliques existe la versión JApplet de swing, que se utiliza para introducir componentes Swing en lugar de componentes AWT. Un aplique necesita un archivo html que lo invoque. Por ejemplo, PrimoApplet.java, el aplique que queremos poner en marcha, lo redactamos y el compilador genera PrimoApplet.class. Para ponerlo en marcha necesitamos un archivo html que incluya el TAG en su interior:

<applet code="PrimoApplet.class" ></applet>

Si este archivo se llama tribilín.html, llegados a este punto tenemos dos posibilidades para poner en marcha el aplique. La primera, en fase debug, es utilizar el programa appletviewer de JDK y, para esto, tendremos que escribir partiendo del prompt de dos:

appletviewer tribilín.html

La segunda es utilizar un web browser, como Explorer o Netscape invocando el archivo tribilín.html.
Como se puede ver, se pone en marcha siempre el archivo html, y no el archivo .class como ocurría para las aplicaciones. Es el archivo html el que invoca la aplicación .java.
Para más informaciones sobre las páginas html os aconsejo visitar el sito HTMLpoint donde se encuentran apartados que tratan este tema. Nosostros prepararemos unas páginas sencillas que sirven sólo para cargar nuestros apliques. por ejemplo, para el aplique PrimoApplet.class de antes, el archivo tribilín.html será algo parecido a:

<html>
<head>
<title>Applet PrimoApplet
</head>
<body>

El siguiente es el aplique PrimoApplet.class

<applet code="PrimoApplet.class" width=100 height=100>¡Tu browser es viejo, tienes que cambiarlo!</APPLET>
</body>
</html>


Hasta ahora hemos visto cómo poner en marcha el aplique, ahora lo tenemos que crear. En primer lugar tenemos que crear una clase llamada PrimoApplet, que amplía la clase java.applet.Applet, y tenemos que definir unos métodos que el sistema (appletviewer o el browser) invocará automáticamente. Uno de estos métodos se llama paint(Graphics O), y Graphics es un objeto que representa la pantalla del aplique. Nosostros lo volveremos a definir de forma que salga en pantalla lo que queramos.
Utilizaremos el método drawString de la clase Graphics para imprimir una cadena en la pantalla.
El programa PrimoApplet.java es

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

public class PrimoApplet extends Applet
{

public void paint (Graphics g)
{
g.drawString("Hola, yo soy el primer aplique.",0,50);
}

}


El paquete aplique contiene tres interfaces y una clase:
Interfaces

AppletContext, esta interfaz corresponde al ambiente del aplique, es decir al documento que lo incluye y a los demás apliques que están el en mismo documento.
AppletStub, se refiere al ambiente de puesta en marcha del aplique, tanto el browser como el appletviewer. AudioClip, la interfaz es una simple abstracción para que toquen unos audios.

Clase
Aplique

Analizamos la clase Applet más detalladamente.
El constructor es único, sin argumentos.
Aplique()

Hay unos métodos invocados del browser o de appletviewer automáticamente, que son: void init(), este método se invoca nada más cargar completamente en el sistema el aplique.
Se utiliza principalmente para inicializar el aplique.

void start(), invocado cuando el sistema pone en marcha el aplique y le avisa del suceso.
void stop(), invocado cuando el sistema bloquea la puesta en marcha del aplique y le avisa del suceso, invocado cuando se teclea STOP del appletviewer y cambia la página en el browser.
void destroy(), invocado cuando el aplique se destruye, es decir, cuando cambiamos, sale del browser o del appletviewer

Por lo tanto el ciclo vital de un aplique es:

  1. Se carga y, sucesivamente, se le da el nombre de init();
  2. Se pone en marcha, se teclea start(). Invoca el método paint() de la superclase Container;
  3. Se para tecleando stop del browser o, cuando la ventana que lo incluye no está en primer plano, se teclea stop(). Cuando vuelve en primer plano se teclea start();
  4. Finalmente, se destruye cuando se sale del browser que lo puso en marcha. En primer lugar se invoca stop y, sucesivamente, el destroy();
En el ejemplo que ponemos a continuación, se visualizan las fases precedentes para ver los resultados con un browser, visto que el output son System.out.print(). Seleccionar en herramientas (tool), show java consola (o parecidos), con el appletviewer, en cambio, el output se escribe en la ventana de la que se invoca el html que invoca el aplique.
Lo editamos en el archivo Etapas.java:

import java.applet.*;
public class Etapas extends Applet
{
public Etapás()
{

System.out.println("Invocado el constructor de Etapas");

}
public void init()
{

super.init();

System.out.println("Puesto en marcha public void init()");

}
public void start()
{

super.start();

System.out.println("Puesto en marcha public void start()");

}
public void stop()
{

super.stop();

System.out.println("Puesto en marcha public void stop()");

}
public void destroy()
{

super.destroy();

System.out.println("Puesto en marcha public void destroy()");

}
}

Lo redactamos con: javac Etapas.java
Para cargarlo vamos a crear el archivo Etapas.html que incluye:

<html>
<head>
<title>Etapas.html carga Etapas.class</title>
</head>
<body>
El siguiente es el aplique Etapas, que nos muestra las etapas por las que pasa el aplique.
<BR>
<applet code="Etapas.class" width=200 height=100>¡Tu browser es viejo, tienes que cambiarlo!</APPLET>
</body>
</html>


Pra ponerlo en marcha teclearemos: appleviewer Etapas.html, o abriremos el archivo Etapas.html con nuestro browser preferido.

Los demás métodos de la clase Applet son:

AppletContext getAppletContext(), da el AppletContext asociado al aplique, es decir, el documento que lo puso en marcha y los demás invocados por éste.
String getAppletInfo(), da informaciones sobre el aplique, tiene que ser sobrescrita, la normal da nulo.
AudioClip getAudioClip(URL url), da el objeto de tipo AudioClip asociado al URL introducido. Os recuerdo que la URL es un recuso del web.
AudioClip getAudioClip(URL url, String name), da el objeto de tipo AudioClip asociado a la URL y al nombre .
URL getCodeBase(), da la url asociado al aplique.
URL getDocumentBase(), da la url del documento html que ha invocado el aplique.
Image getImage(URL url), da el objeto de tipo Image asociada a la url introducida y se puede imprimir en la pantalla.
Image getImage(URL url, String name), da el objeto de tipo Image asociado a la url y al nombre.
Locale getLocale(), da el objeto de tipo Local asociado al aplique y se ocupa de la internacionalización. Se encuentra en el paquete java.util.
String getParameter(String name), da el valor del parámetro llamado name tomado de la página html que invoca el aplique. El aplique, por lo tanto, se puede invocar con valores de entrada, como el args del main. Este método los recoge.

Por ejemplo, si invoco el aplique Clock.class de esta forma:

<applet code="Clock" width=50 height=50>
<param name=Color value="blue">
</applet>


Si en código del aplique escribo getParameter("Color") el resultado será "blue".
String[][] getParameterInfo(), da un array que incluye informaciones sobre los parámetros del aplique. boolean isActive(), nos dice si el aplique está activo.
static AudioClip newAudioClip(URL url), coge un AudioClip de un dato url.
void play(URL url), toca el audio clip tomado de la url absoluto.
void play(URL url, String name), toca el Clip que nos da la url y el nobmre especificado.
void resize(Dimension d) o void resize(int width, int height), pide al plique que modifique sus dimensiones. Dimension es un objeto awt que es una dimensión, es decir, un valor de anchura y altura.
void setStub(AppletStub stub), ajusta el AppletStub del aplique al nuevo stub.
void showStatus(String msg), pide al aplique que la cadena se imprima en la ventana de estado del aplique.

Un aplique es una extensión de Panel, que es un simple contenedor. De éste hereda el método: addNotify

Panel amplía Container del que hereda y hace heredar a Applet, los métodos: add, add, add, add, add, addContainerListener, addImpl, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getInsets, getLayout, getMaximumSize, getMinimumSize, getPreferredSize, insets, invalidate, isAncestorOf, layout, list, list, locate, minimumSize, paint, paintComponents, paramString, preferredSize, print, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, removeNotify, setFont, setLayout, update, validate, validateTree

A su vez Container amplía Component, y, por lo tanto, están los atributos

BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT

y los métodos:

action, add, addComponentListener, addFocusListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addPropertyChangeListener, addPropertyChangeListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, getBackground, getBounds, getBounds, getColorModel, getComponentOrientation, getCursor, getDropTarget, getFont, getFontMetrics, getForeground, getGraphics, getHeight, getInputMethodRequests, getLocation, getLocation, getLocationOnScreen, getName, getParent, getPeer, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isDisplayable, isDoubleBuffered, isEnabled, isFocusTraversable, isLightweight, isOpaque, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, removeComponentListener, removeFocusListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, reshape, resize, resize, setBackground, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setEnabled, setForeground, setLocale, setLocation, setLocation, setName, setSize, setSize, setVisible, show, size, toString, transferFocus

Y, por lo tanto, los de Object:
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

La jerarquía es:



Preparamos otro pequeño aplique llamado Info.java

import java.applet.*;
import java.awt.*;
import java.awt.image.*;

public class Info extends Applet implements ImageObserver
{


public Info()
{

}

public void init()
{
super.init();
setBackground(Color.yellow);
resize(400,200);
}


public void start()
{
super.start();
}

public void stop()
{
super.stop();
}


public void destroy()
{
super.destroy();
}


public void paint (Graphics g)
{
g.setColor(Color.darkGray);

String p=getAppletInfo();

if (p!=null) g.drawString(p,10,10);

g.drawString("CODE:"+getCodeBase().toString(),10,20);

g.drawString("DOC:"+getDocumentBase().toString(),10,30);

Image io=getImage(getCodeBase(),"me.JPG");

// Para visualizar esta imágen necesito que Info implemente la interfaz ImageObserver.
// g.drawImage(Image,x,y,ImageObserver);
g.drawImage(io,10,40,this);

g.drawString("éste soy yo",80,80);

String nome=getParameter("pámetro3");

String cognome=getParameter("parámetro2");

String eta=getParameter("parámetro1");

g.drawString("Pone en marcha el programma",10,150);

g.drawString(nombre,10,160);

g.drawString(apellidos,10,170);

g.drawString("de "+edad+" años",10,180);

}

public String getAppletInfo()
{
return "Applet de Pietro Castellucci";
}

public String[][] getParameterInfo()
{

String[][] r={
{"parámetro1","entero","Tu edad"},
{"parámetro2","Cadena", "Tus Apellidos"},
{"parámetro3","Cadena","Tu Nombre"}
};
return r;
}

}

Para cargar el aplique vamos a crear un archivo llamado Info.html, que incluye:

<html>
<head>
<title>Info.html carga Info.class</title>
</head>
<body>
ëste es el aplique Info.
<BR>
<applet code="Info.class" width=400 height=200>
<param name=parámetro1 value=" EDAD DEL QUE PONE EN MARCHA EL PROGRAMA ">
<param name=parámetro2 value=" APELLIDOS DEL QUE PONE EN MARCHA EL PROGRAMA ">
<param name=parámetro3 value=" NOMBRE DEL QUE PONE EN MARCHA EL PROGRAMA ">
¡Tu browser es viejo, hay que cambiarlo!
</APPLET>
</body>
</html>

Cuidado con especificar los parámetros parámetro1, parámetro2 y parámetro3 porque en el aplique no se hace ningún control de sus definiciones. Por lo tanto, el aplique hace una excepción no capturada, además en el directorio donde ponéis el aplique, tiene que haber un archivo llamado me.JPG, que es una imágen 67x88 pixel.


  Volver al inicio de la página