Lección 06


El paquete applet y la clase Applet


El paquete java.applet es el más pequeño de los paquetes básicos de Java y el más singular. Cuenta solamente con una clase: Applet y tres interfaces: AppletContext, AppletStub y AudioClip. La clase Applet es la clase que se extiende para crear todos los applets que aparecen en miles de páginas Web. El objetivo de la clase Applet es ofrecer al programador una conexión con el navegador de internet. En la página Web se especifica el applet que se va a ejecutar y los parámetros que configuran la llamada particular. El navegador es quien se encuentra con la etiqueta <APPLET>  y los parámetros que la acompañan y se encarga de cargar el código del applet y pasarle los parámetros. Pero es el mismo navegador el encargado de realizar las funciones que el applet tiene programadas, pues es el intérprete de Java para los applets. Además el navegador alimenta al applet de cierta información que necesita en su funcionamiento y le proporciona algunos servicios importantes. Por ejemplo, si el applet necesita una imagen en formato gif o jpg, se la pide al navegador, el navegador la carga y se la pasa al applet. También le ofrece acceso a los otros applets que puedan estar incrustados en la misma página. Finalmente, el applet a su vez puede ofrecer servicios al navegador a través de sus métodos públicos y el navegador puede utilizar estos servicios usando JavaScript (o Visual Basic Script) .

La relación entre el navegador y los applets es muy estrecha y puede ser muy rica. En las otras secciones de esta lección estudiaremos algunos aspectos de esa relación. En esta sección estudiaremos el funcionamiento propio de un solo applet.

Como ya se dijo, los applets se construyen como extensiones o subclases de Applet. La clase Applet es a su vez una extensión o subclase de Panel, que es a su vez, subclase de Container que es a su vez, subclase de Component. Esta genealogía le da a la clase Applet una estructura muy rica.

Para crear un applet hay que crear una subclase de java.applet.Applet y sobreescribir algunos de los métodos "vacíos" de Applet:

public void init()
public void start()

public void stop()
public void destroy()

Estos cuatro métodos existen en la clase Applet pero no hacen nada. Su importancia radica en cuándo los llama el navegador.   Es imprescindible comprender el papel de cada uno de estos métodos para lograr que los applets funcionen correctamente y no causen problemas a los navegadores.

public void init() se ejecuta una sola vez cuando el navegador carga el applet. La implementación de este método suele contener la creación de la interfaz de usuario del applet y las inicializaciones necesarias de variables y clases auxiliares. Nunca deben realizarse inicializaciones gráficas en init() porque cuando este método se ejecuta aún no se ha hecho el despliegue de los componentes gráficos y en ese momento no se conoce el tamaño que van a a tener. Ignorar este detalle puede traer muchos quebraderos de cabeza a los programadores. Si el usuario recarga la página que contiene al applet o sale de ella y luego regresa, este método no vuelve a ejecutarse.

public void start() Se ejecuta cada vez que el applet arranca. Cuando el navegador entra por primera vez a una página Web que contiene al applet, ejecuta init() y start(). Pero si el usuario recarga la página o pasa a otra y regresa, el navegador  vuelve a ejecutar start() pero ya no ejecuta init(). Cuando se ejecuta start() ya se tiene acceso a los gráficos y se pueden saber los tamaños de  los componentes, por eso, si el programador necesita saber el tamaño de algunos componentes gráficos, éste es un lugar donde puede averiguarlos. El método start() es donde se debe arrancar el funcionamiento del applet. Si se utilizan hilos (lección 7) es el lugar donde se deben crear los hilos y echarlos a andar llamando a sus propios métodos start().

public void stop() se ejecuta cada vez que el applet se para. En particular se ejecuta si el navegador carga otra página. Este es el método en donde deben pararse los hilos que se hayan arrancado en el método start().

public void destroy() se ejecuta cuando el applet se destruye. Esto ocurre sólo cuando el navegador se cierra. Es el lugar adecuado para liberar algunos recursos que pudiera estar utilizando el applet, aunque en general es más recomendable hacerlo en stop() aunque eso implique que deben reiniciarse en start cada vez que se recarga el applet. En la mayoría de los casos no es necesario sobreescribir este método.

A continuación se explican algunos otros métodos de Applet. Los dos primeros casi nunca se implementan pero si se quiere crear un applet reutilizable deberían implementarse cuidadosamente. Son métodos que un navegador normalmente no utiliza, así que sólo se ejecutan cuando un programador en calidad de usuario del applet los llama explícitamente.

public String getAppletInfo() se utiliza para dar información específica sobre el applet. El programador puede sobreescribir este método y usarlo para informar sobre el autor, el Copyright, la fecha y la versión actual.

public String[][] getParameterInfo() regresa una lista de matrices de 3 cadenas que debe informar el nombre, los valores posibles y el significado de cada uno de los parámetros que pueden enviarse al applet desde una página Web. El programador debe sobreescribir este método como parte de la documentación de su applet.

El método public String getParameter(String nombre) regresa el valor que se ha dado al parámetro nombre en la página Web dentro de la llamada al applet.  Este es el método que se utiliza para leer la información específica que se le pasa al applet en los parámetros.

Los métodos getImage y getAudioClip sirven para obtener imágenes y sonido y play sirve para reproducir sonido directamente. Estos métodos se estudian en las últimas secciones de esta lección.

Los métodos getCodeBase() y getDocumentBase() devuelven la dirección de internet URL (Uniform Resource Locator) donde se encuentra el código del applet que se está ejecutando y la página Web que se está ejecutando, respectivamente. En la lección 9 se estudiará lo que es un URL, pero aquí es importante entender que estas dos direcciones juegan un papel importante en el funcionamiento de los applets. Por razones de seguridad un applet sólo puede leer datos del servidor donde se encuentra su código, o sea su CODEBASE. Algunos navegadores incluso dan error de seguridad cuando un applet trata de leer dentro del mismo servidor porque el navegador es incapaz de distinguir que dos URL's pertenecer al mismo servidor. Este tipo de errores  son cada vez menos frecuentes en los navegadores, pero ocurren. En general es más seguro leer sólo archivos por debajo del nivel del directorio del CODEBASE. Netscape 4 daba errores de seguridad cuando, navegando sobre el disco local, se carga un HTML con un applet que lee en el propio CODEBASE,  pero no los da si se llega a la misma página HTML navegando solamente por HTML's a partir de la página de inicio.

Los métodos resize sólo funcionan con el appletviewer. Los navegadores fijan las dimensiones del applet a partir de los valores de WIDTH y DEPTH declarados dentro de la etiqueta <APPLET> y no permiten cambiarlas durante la ejecución del applet.

El método showStatus(String mensaje) escribe su mensaje en la línea de estado del navegador. Es un mecanismo sencillo para enviar mensajes, pero el programador no debe confiar en él para dar mensajes importantes al usuario pues la línea de estado pueden usarla otros applets y el propio navegador para escribir otros mensajes, de manera que los enviados desde el applet a veces se ven sólo por un instante. 

La clase AppletStub y el método setStub sólo se utilizan al implementar navegadores y eso está fuera del alcance de este curso.

El método getAppletContext() devuelve un objeto de la clase AppletContext que contiene toda la información relativa a los otros applets que están ejecutándose simultáneamente en la misma página y permite pedir al navegador que cargue una página html. Estos son los métodos de AppletContext:

public abstract Applet getApplet(String nombre);
public abstract Enumeration getApplets();

public abstract AudioClip getAudioClip(URL url);
public abstract Image getImage(URL url);
public abstract void showDocument(URL url);
public abstract void showDocument(URL url,String nombre);
public abstract void showStatus(String status);

AppletContext es una clase abstracta. Sin embargo el método getAppletcontext() de Applet devuelve un objeto concreto del que el applet puede extraer la información que necesita. Varios de los métodos de AppletContext tienen una contraparte en Applet que hace exactamente lo mismo y por tanto no es necesario ni explicarlos ni utilizarlos. Sin embargo hay tres que son exclusivos de AppletContext y son fundamentales para comunicar unos applets con otros y para que un applet pida al navegador cargar una página Web: getApplet, getApplets y showDocument.

Applet getApplet(String nombre) devuelve un objeto de la clase Applet si se está ejecutando en ese momento un applet con ese nombre. Esto permite hacer llamadas a métodos de aquel applet, como se ilustra en el ejemplo siguiente.

Las etiquetas con las que se incluyeron estos applets son éstas:

<applet code="ejem06.applet1.class" codebase="./" name="primero"
        width="200" height="200">

</applet>

<applet code="ejem06.applet2.class" codebase="./"
        width="200" height="200" hspace="50">
</applet>

Al primero se le dio el nombre primero. Aquí está el código de ambos applets.

El primer applet define un método cambia(int c) para cambiar el color. El segundo applet utiliza este método cada vez que hay un click sobre el botón. Para poder utilizar el método cambia(int c) de applet1 tiene que obtener el AppletContext, de allí obtener el applet concreto y hacer una conversión de tipo (type casting) explícita a applet1, pues no cualquier applet tiene un método cambia(int c). Nota: Este ejemplo no funciona en Netscape 6.1, aunque sí funcionaba en Netcape 4.7.

El método Enumeration getApplets() devuelve un objeto del tipo Enumeration que enumera todos los applets que se están ejecutando. El siguiente ejemplo muestra cómo se usa este método para obtener todos los applets de esta página.

Nota: IExplorer (hasta la versión 5.5) tiene un error en este método y da sólo los applets que se están ejecutando y que además están en el mismo CODEBASE del applet que hace la llamada. appletviewer antes funcionaba bien pero ahora tiene el mismo error que IExplorer. Netscape antes funcionaba bien y ahora (Versión 6.1) sólo devuelve un applet. ¿Vamos progresando? Los autores de estas notan sospechan que el acceso a applets con otro codebase daría lugar a problemas de seguridad y por eso IExplorer 5.5 y el Appletviewer del SDK 1.3.1 ya no devuelven información de los applets con otros codebases.

Por último, los métodos showDocument instruyen al navegador para que cargue y muestre la página Web especificada en el URL. La segunda versión del método tiene un segundo parámetro de tipo String que puede tener los siguientes valores:

El siguiente applet ilustra las diferentes opciones de showDocument. En esta página aparece sólo su código. En él el lector puede elegir una opción para el segundo parámetro y al pulsar el botón se ejecuta showDocument con esa opción. Para probar  su funcionalidad pulse aquí

 

Los navegadores no están obligados a implementar este método, por lo cual no se garantiza que el applet funcione correctamente en cualquier navegador.


Inclusión de applets en páginas Web


Para incluir un applet en una página Web hay que usar la etiqueta <APPLET> y dentro de ella escribir los nombres y valores de algunos atributos. Si se desea insertar un applet llamado miApplet.class, por lo menos hay que escribir esto:

<APPLET CODE="miApplet.class" WIDTH=200 HEIGHT=200></APPLET>

Nota: En Java 2 se recomienda otra etiqueta para la inclusión de applets: <OBJECT>. Este tema es algo complicado y se cubrirá el la lección 10.

Los tres atributos obligatorios de la etiqueta <APPLET> son CODE, WIDTH y HEIGHT y sus valores deben ser el nombre del applet incluyendo la extensión .class, el ancho que ocupará el applet en pixels y el alto, también en pixels, respectivamente. Por supuesto los valores del ancho y alto pueden ser otros, los que el creador de la página decida. Éstos son los parámetros obligatorios, sin ellos la llamada al applet estaría incompleta y el navegador no la realizaría. Para que esta llamada funcione correctamente, es necesario que el archivo miApplet.class se encuentre en el mismo directorio que el documento html en el que se hace esta llamada al applet y además, es necesario que miApplet.class no pertenezca a un paquete, o más bien que pertenezca al paquete por defecto sin nombre. Si miApplet.class pertenece a un paquete, digamos a paquetes.paquete1, entonces es necesario que el archivo miApplet.class se encuentre en el subdirectorio paquetes/paquete1/  del directorio donde se encuentra el documento html.

Para poder llamar a applets que se encuentran en otro directorio o en cualquier otro servidor de internet, es necesario utilizar otro parámetro llamado CODEBASE. Este es uno de los parámetros más importantes y más delicados de los applets. Se recomienda al alumno leer cuidadosamente la siguiente explicación.

Cuando el valor de CODEBASE no se especifica, es como si se especificara CODEBASE="./" es decir, como si CODEBASE fuese el mismo URL del documento html. En general CODEBASE es una dirección de internet, un URL. Pero puede ser una dirección absoluta o una dirección relativa. Por ejemplo:

<APPLET CODE="miApplet.class" CODEBASE="http://servidor.es" WIDTH=200 HEIGHT=200></APPLET>

es lo que habría que escribir para llamar al applet miApplet.class si éste se encontrase en http://servidor.es. Este es un ejemplo de un CODEBASE  absoluto. Muchas veces el CODEBASE que se utiliza es relativo por razones de comodidad. Por ejemplo:

<APPLET CODE="miApplet.class" CODEBASE="../clases/" WIDTH=200 HEIGHT=200></APPLET>

es lo que habría que escribir para indicar que el archivo miApplet.class se encuentra en el subdirectorio clases/ del directorio inmediato superior al que contiene el documento html. Los CODEBASE relativos son muy útiles para poder desarrollar un Web con applets en el disco fijo de una computadora y luego trasladar el Web a un servidor de internet sin tener que hacer cambios, lo único que hay que hacer es respetar la organización relativa de los archivos en los subdirectorios.

Además de los atributos ya mencionados, dentro de la etiqueta <APPLET> pueden usarse los parámetros ALIGN, HSPACE y VSPACE que funcionan igual que para las imágenes, para definir la alineación del applet y para determinar los espacios de separación (en pixels) con respecto a otros objetos de la página.

Finalmente hay otros dos atributos que pueden ponerse dentro de la etiqueta <APPLET>: NAME y ALT. El primero sirve para dar un nombre al applet con el objeto de poderse referir a él usando JavaScript, VisualBasic Script o bien, desde otros applets. El segundo sirve para colocar un mensaje para los navegadores que entienden la etiqueta <APPLET> pero no tienen activada la interpretación de applets. Este es un ejemplo del uso de estos dos parámetros.

<APPLET CODE="miApplet.class" WIDTH=200 HEIGHT=200
       NAME="miPrimerApplet"
        ALT="Active su navegador para poder ver este applet!">
</APPLET>

Además de los atributos, que se ponen dentro de la etiqueta <APPLET>, hay otros parámetros que se le pueden pasar a un applet y que se escriben después de la etiqueta <APPLET> y antes de la etiqueta de terminación de applet </APPLET>. Se trata de los parámetros propios de cada applet, a través de los cuales se puede configurar un applet o pasarle todo tipo de información que él puede recibir durante la ejecución y utilizarla durante su funcionamiento. Los parámetros que entiende un applet dependen de su programación interna y normalmente deberían estar documentados por el programador del applet quien debe sobreescribir el método String[][] getParameterInfo()  para que devuelva los nombres, valores posibles y significado de todos los parámetros del applet. Estos parámetros se pasan al applet desde la página html escribiendo una línea como esta para cada parámetro entre las etiquetas <APPLET> y </APPLET>:

<PARAM NAME="nombre" VALUE="valor">

Donde "nombre" y "valor" son cadenas arbitrarias. Veamos un ejemplo sencillo de un applet que utiliza tres parámetros para dar un mensaje. Los parámetros que reconoce son MENSAJE, LETRA, COLOR, FONDO y TAMAÑO.

Estos son los parámetros que se usaron en esta llamada del applet mensaje.class:

<APPLET CODE="ejem06.mensaje.class" CODEBASE="./" WIDTH=200 HEIGHT=200>
<param name="MENSAJE" value="¡Saludos!">
<param name="LETRA" value="TimesRoman">
<param name="TAMAÑO" value="24">
<param name="FONDO" value="rosa">
<param name="COLOR" value="rojo">
</APPLET>

El alumno debe observar que todos los parámetros del applet se leen internamente usando el método getParameter y se obtienen como cadenas, por lo cual es necesario hacer conversiones especiales según el tipo de valor que se desea obtener. Por ejemplo para obtener el tamaño hubo que usar una conversión de cadena a entero y para obtener los colores es necesario usar un método leeColor que analiza la cadena del parámetro para convertirla en un color. Estas conversiones son típicas y los métodos usados en ellas pueden ser útiles en otros applets.


Imágenes


La clase Applet tiene un servicio para leer imágenes desde la misma dirección donde se encuentra el código del applet. Los métodos Image getImage(URL url)  e  Image getImage(URL url,String nombre) devuelven un objeto de tipo java.awt.Image que puede usarse directamente con el método drawImage de la clase Graphics para desplegar una imagen.

El siguiente ejemplo muestra cómo se usa getImage.

Este applet tiene un sistema para leer hasta 100 imágenes que se le pueden pasar por parámetro. getImage lee imágenes en formato gif o jpg. Las imágenes en formato gif 89 que tienen un color definido como transparente, conservan la transparencia, como puede verse en el color magenta que rodea a la imagen teo.gif.

El alumno debe observar que el URL que se utiliza como primer parámetro de getImage es getCodeBase(). Esto es porque el método getCodeBase() devuelve precisamente el URL del sitio donde se encuentra el applet y ése es el único sitio de donde un applet puede leer imágenes o cualquier otro archivo. En realidad un applet debería poder leer imágenes y otros datos de cualquier lugar en el mismo servidor donde se encuentra el código del applet, pero en la realidad los navegadores no verifican bien esta condición y suelen ser más estrictos, limitando el acceso al URL del  CODEBASE y sus subdirectorios. En el ejemplo anterior las imágenes se encuentran en el subdirectorio images/ pero se utiliza el URL del CODEBASE que se obtiene con el método getCodeBase() y se incorpora el subdirectorio images/ como parte del nombre de las imágenes. De hecho esto se hace en los valores de los parámetros que se pasan al applet. Esta es la llamada al applet:

<APPLET CODE="ejem06.imagenes.class" CODEBASE="./" WIDTH=200 HEIGHT=200>
<param name="IMAGEN01" value="ejem06/images/teo.gif">
<param name="IMAGEN02" value="ejem06/images/atardecer.jpg">
<param name="IMAGEN03" value="ejem06/images/mandelbrot.jpg">
<param name="IMAGEN04" value="ejem06/images/marilyn.jpg">
</APPLET>

Las imágenes son cargadas por el navegador y éste le pasa al applet la referencia de donde se encuentra la información de todos los pixels de la imagen. Los navegadores poseen un sofisticado sistema para leer imágenes que les permite leer varias simultánemente y desplegar las partes leidas en cada momento hasta que se cargan completamente. Para que los applets se beneficien de este sistema es para lo que se pasa al método drawImage el último parámetro (ImageObserver). Este parámetro permite que el navegador informe al applet que se ha producido una actualización en la lectura de la imagen y que es tiempo de hacer una actualización de la pantalla llamando a repaint(). El programador no tiene que hacer nada para que esto ocurra, es un proceso del que se encarga totalmente el navegador, pero lo que sí hay que hacer para que las actualizaciones funcionen correctamente, es pasar como último parámetro el componente en cuyo método paint(Graphics g) se utiliza la imagen, en nuestro caso usamos this para indicar "este applet". Esto puede tener poca importancia cuando el applet funciona localmente, pero en internet es muy importante pues los tiempos de carga de las imágenes pueden ser bastante grandes. Pero muchas veces esto no es satisfactorio y es mejor obligar a que la imagen se cargue completamante antes de trabajar con ella. Para esto se utiliza el MediaTracker. Lo que se hace en el applet es registrar en un MediaTracker cada imagen y esperar hasta que se carga o de una excepción, antes de cargar la siguiente. En este applet no se está haciendo un tratamiento de la excepción, pero en un programa serio debería hacerse.

La clase java.awt.Image que se utiliza para representar imágenes es suficiente para casi todos los propósitos de la programación de applets que utilicen imágenes. Sin embargo, para un tratamiento avanzado de las imágenes es necesario utilizar todo un conjunto de clases especializado en ellas, el paquete java.awt.image. En él hay clases que permiten convertir una imagen en una matriz de bytes o de enteros y viceversa. Este tema se considera avanzado y no se estudiará en este curso. 


Sonido


La clase Applet tiene un servicio para leer sonidos desde la misma dirección donde se encuentra el código del applet. Los métodos AudioClip getAudioClip(URL url)  y  AudioClip getAudioClip(URL url,String nombre) devuelven un objeto de tipo java.applet.AudioClip que puede usarse para emitir sonidos. 

El siguiente ejemplo muestra cómo se usa getAudioClip. El applet sonidos.class se construyó como una extensión de imagenes.class que fue el applet que se usa en la sección anterior para mostrar imágenes. De esta manera sonidos.java solamente tiene el código para incorporar los sonidos al applet de las imágenes.

Este applet tiene un sistema para leer hasta 100 "audio clips" que se le pueden pasar por parámetro. En las primeras versiones de Java getAudioClip leía únicamenete sonidos en formato au con ley miu de Sun, pero en versiones recientes también lee algunos archivos .wav. Hay varios programas freeware y shareware que convierten archivos .wav a .au con ley miu.

Estos son los parámetros que se han usado para llamar al applet sonidos.class:

<applet code="sonidos.class" codebase="./ejem06/" width="200" height="200">
<param name="IMAGEN01" value="images/teo.gif">
<param name="IMAGEN02" value="images/atardecer.jpg">
<param name="IMAGEN03" value="images/mandelbrot.jpg">
<param name="IMAGEN04" value="images/marilyn.jpg">
<param name="SONIDO01" value="au/teo.au">
<param name="SONIDO02" value="au/atardecer.au">
<param name="SONIDO03" value="au/mandelbrot.au">
<param name="SONIDO04" value="au/marilyn.au">
</applet>

La lectura de los archivos .au funciona igual que la de las imágenes, hay que leerlos en subdirectorios del CODEBASE.

La clase java.applet.AudioClip tiene sólo tres métodos para controlar los sonidos:

public abstract void loop();
public abstract void play();
public abstract void stop();

El segundo, play(), es el que se usó en el applet sonidos.class y su función es reproducir una sola vez el sonido. loop() reproduce el sonido cíclicamente, es decir, lo repite una y otra vez. stop() detiene la ejecución del sonido ya sea que se haya producido por un play() o por un loop(). Si se utiliza play() y se desea que el sonido se reproduzca completo, no es necesario utilizar stop() cuando termina. Se pueden reproducir varios sonidos simultáneamente.

El hecho de que la lectura de imágenes se haga en la clase java.applet.Applet se debe a que se aprovechan las funciones de lectura de imágenes del navegador. Sin embargo el hecho de que la lectura y reproducción de sonidos se haga en la clase Applet y en el paquete java.applet se debe únicamente a que no había un mejor lugar para ello. Quizás la mayor ventaja de haberlo hecho así es que de esta manera quedan integradas las imágenes y los sonidos en el mismo entorno de programación,  lo cual convierte a los applets en un sistema multimedia elemental. Como veremos en la lección 7, las animaciones caben dentro de este sistema.


Ejemplos de Java Script.


Esta sección no es un minicurso de JavaScript. Su único objetivo es dar al alumno algunas bases elementales sobre JavaScript para que conozca su diferencia con Java y también sus posibles relaciones.

JavaScript es un lenguaje para programar páginas Web que fue diseñado por Netscape. No compite con Java pues su campo de aplicación está en dar interacción a las páginas Web a través de sus propios elementos como son las formas, mientras que Java es un lenguaje de programación de uso general. Los applets de Java son núcleos interactivos incrustados en páginas Web, pero su relación con las páginas mismas es pobre mientras que JavaScript puede tener una relación muy rica con las páginas Web, incluso puede crear páginas al instante. Las limitaciones de JavaScript también son claras. Es un lenguaje que sólo puede vivir dentro de las páginas Web y, por ser un lenguaje puramente interpretado, no tiene un compilador que nos informe de los posibles errores de programación, así que la única manera de detectarlos es durante la ejecución.

Lo más importante que deseamos exponer sobre JavaScript es que 

Esto hace que la combinación de applets y JavaScript sea una herramienta muy útil para el enriquecimiento de páginas Web, especialmente páginas Web educativas.

Ahora usaremos unos botones de una forma html para detener y arrancar una animación (que como ejemplo corresponde a la lección 7). En primer lugar damos el nombre mapas1 al applet ejem07.simpanim al insertarlo en la página. Esto se hace dentro de la etiqueta <applet> así:

<applet name="mapas1" code="ejem07.simpanim.class" codebase="./"
              width="156" height="120">

Luego, en la forma, al definir los botones se les agrega un parámetro onclick="mapas1.parar()" en el botón de parar y  onclick="mapas1.continuar()" en el otro botón:

<form>
<p>
<input type="button" value="parar" onclick="mapas1.parar()">
<input type="button" value="continuar" onclick="mapas1.continuar()">
</p>
</form>

Este es el resultado:

En este sencillo ejemplo se han utilizado tres cosas fundamentales de JavaScript:

Para aclarar mejor el segundo punto hacemos otra llamada al mismo applet dándole otro nombre: name="mapas2" y agregamos otra instrucción de JavaScript al código asociado a onclick:

<form>
<p>
<input type="button" value="parar"
       onclick="mapas2.parar(); alert('animación detenida');">
<input type="button" value="continuar"
       onclick="mapas2.continuar(); alert('animación funcionando');">
</p>
</form>

Este es el resultado. Deberá dar unos mensajes al pulsar los botones, además de parar o continuar la animación:

Como puede verse en este ejemplo el control de applets desde formas de una página Web es sencillo, siempre y cuando los applets hayan sido programados con funciones públicas adecuadas para ello. Por lo tanto es importante que el programador de applets tenga en mente esta posibilidad y cuando defina sus funciones externas lo haga pensando en que podrían ser utilizadas por un programador de JavaScript.

Veamos ahora una aplicación ligeramente más compleja. Se trata de un applet que se puede controlar usando sus propios botones o bien los de la forma en la página.

 

 




Nuevamente, esto se logra asociando al evento onclick un código de JavaScript, pero esta vez ese código hace llamadas a  funciones de JavaScript definidas en el encabezado de la página. Estudie el código JavaScript al principio esta página y busque la inserción de este applet y la forma asociada que lo controla.

Si su navegador reconociese la etiqueta de applet, aquí vería un applet

Para definir funciones y código JavaScript es necesario incluirlo entre las etiquetas: <SCRIPT LANGUAGE="JavaScript"> y </SCRIPT>. Es conveniente colocar las funciones que se van a utilizar en la página dentro de la cabecera del HTML, es decir, entre las etiquetas <HEAD> y </HEAD>, tal como se hizo en este caso.

Como puede verse, en JavaScript no se declaran los tipos de las variables. Esto lo hace fácil de usar para programadores novatos pero muy incómodo para los expertos. El paso de parámetros a los métodos de un applet requiere de mucho cuidado. Lo más recomendable es sólo enviar parámetros en forma de cadenas (Strings) para evitar problemas en las conversiones de tipo.

JavaScript tiene muchas otras aplicaciones además de controlar applets. La más espectacular es la generción de páginas Web al instante, es decir, tiene la capacidad de crear páginas Web que no existen como archivos en ningún servidor,  y hacer que el navegador las lea. Los siguientes ejemplos muestran ésta y otras posibilidades del JavaScript. 


Generación de páginas al instante
Ejemplos sencillos de esta posibilidad.

Éste es el código HTML-JavaScript de la página JStest.html.
Si su navegador reconociese la etiqueta de applet, aquí vería un applet


La fecha y la hora cada segundo
Una página Web que cambia con el tiempo.

Éste es el código HTML-JavaScript de la página fechayhora.html.
Si su navegador reconociese la etiqueta de applet, aquí vería un applet


Una clase en JavaScript
Cómo crear una clase en JavaScript.

Éste es el código HTML-JavaScript de la página JScircle.html.
Si su navegador reconociese la etiqueta de applet, aquí vería un applet


Configuración de un applet
Usando un applet y una forma se define la configuración de otro applet y se crea instanténeamente una página con el applet configurado. El applet que se usa en este ejemplo es uno de los que se desarrollarán en la lección 7.

Éstos son los códigos HTML-JavaScript de las cuatro páginas
que conforman el ejemplo:
Si su navegador reconociese la etiqueta de applet, aquí vería un applet

Si su navegador reconociese la etiqueta de applet, aquí vería un applet

Si su navegador reconociese la etiqueta de applet, aquí vería un applet

Si su navegador reconociese la etiqueta de applet, aquí vería un applet

Nota: Los autores de este curso agradecen a su amigo Fermín Revueltas la aportación de este ejemplo.


Índice

Ejercicios de la Lección 06.


José Luis Abreu y Marta Oliveró