Está en la página 1de 20

Que es una applet Un applet se entiende como un programa Java que no puede ser ejecutado por si mismo, sino

que para su ejecucin debe estar inmerso o embebido dentro de otro. Corre de manera segura dentro de un navegador, a partir del archivo con extensin .class generado por la compilacin del applet. Un applet cualquiera es una subclase de la clase java.applet.Applet, o sea que su estructura y comportamiento son heredados de la clase Applet. Todos los applets son subclases de Applet, asi que se debe importar el paquete java.applet. La siguiente figura ilustra la jerarquia de herencias de la clase Applet, lo cual da una idea de lo que puede hacer, o el comportamiento de un applet. La clase Applet extiende a la clase Panel de AWT, a su vez extiende a la clase Container, que extiende a la clase Component. Todas estas clases suministran las bases para el desarrollo de interfaces grficas basadas en ventanas. java.lang.Object java.awt.Component java.awt.Container java.awt.Panel java.applet.Applet Herencias de la clase AppletLa clase Applet : Que es una applet 6 - 3 La clase Applet da el soporte necesario para las actividades de manejo de ventanas. Como la mayor parte del trabajo de los applets se realiza en modo grfico en lo que se denomina interfaz grfica, se debe importar tambin el paquete java.awt, o sea el conjunto de herramientas para disear interfaces grficas de usuario. A ttulo de contrastar de manera general, la forma de visualizar los resultados en los applets y las aplicaciones, en los primeros se dibuja (por ejemplo con el mtodo Graphics.drawString(), y en los

segundos se escribe (por ejemplo con el mtodo System.out.println()). Aunque se puede dibujar en ambas utilizando el componente lienzo o Canvas del paquete java.awt. La clase Applet La siguiente tabla muestra mtodos definidos por la clase Applet en Java2, y proporcionan todo lo necesario para ejecutar un applet desde su inicio hasta su finalizacin, as como los mtodos para cargar y exhibir imgenes y reproducir sonidos. La documentacin de cada uno de estos mtodos se encuentra en el directorio C:/jdk1.4.0/docs/ del JDK.

Algunos de los mtodos anteriores sern tratados a lo largo de la unidad en los ejemplos resueltos.

Metodos de la clase Applet void destroy( ) Este mtodo es llamado por el navegador justamente antes de que el applet termine su ejecucin. AppletContext getAppletContext( ) Devuelve el contexto asociado con el applet, lo que le permite consultar y afectar el medio ambiente en el cual se ejecuta. String getAppletInfo( ) Devuelve una cadena que describe el applet.La clase Applet : La clase Applet 6 - 4 AudioClip getAudioClip(URL url) Devuelve un objeto AudioClip especificado en la direccion url. AudioClip getAudioClip(URL url, String name) Devuelve un objeto AudioClip especificado

en la direccion url, con el nombre name. URL getCodeBase( ) Devuelve el URL del applet que lo llama. URL getDocumentBase( ) Devuelve el URL del documento HTML que invoca al applet. Image getImage(URL url) Devuelve un objeto Image en la direccion indicada por url. Image getImage(URL url, String name) Devuelve un objeto Image en la direccion indicada por url, con el nombre name. Locale getLocale( ) Suministra Locale del applet si se ha asignado. String getParameter(String name) Devuelve los parametros de la applet asociados con name desde una pgina HTML. String[ ][ ] getParameterInfo( ) Devuelve una tabla String que describe los parametros reconocidos por la applet.Cada entrada de la tabla se forma de tres cadenas: nombre del parametro, tipo y explicacin. void init( ) Llamado por el navegador o el appletviewer, cuando el applet es cargada en el sistema y comienza su ejecucin. boolean isActive( ) Devuelve true si la applet esta activa y false si esta parada. static AudioClip newAudioClip(URL url) Toma un archivo de sonido en la direccion

url. void play(URL url) Reproduce el archivo de sonido especificado en la direccion absoluta url. void play(URL url, String name) Reproduce el archivo de sonido con el nombre name especificado en la direccion url. void resize(Dimension dim) Redimensiona el tamao del applet de acuerdo a dim. Dimension es una clase que contiene dos campos enteros: width y height.La clase Applet : La clase Applet 6 - 5 void resize(int ancho, int alto) Redimensiona el tamao del applet de acuerdo a las dimensiones ancho y alto. void setStub(AppletStub stub) Un stub es una pequea parte de cdigo que proporciona el enlace entre el applet y el navegador. El mtodo hace que el objeto stub sea el resguardo del applet. Es usado por el interprete de Java y normalmente no lo utiliza el applet. void showStatus(String msg) Para hacer que el argumento msg de tipo String sea visualizado en en la ventana de estado del applet. void start( ) Llamado por el navegador o appletviewer para informar que el applet debe iniciar su ejecucin. void stop( ) Llamado por el navegador o appletviewer para informar que el applet debe suspender su ejecucin.

Estructura de un Applet Un applet es ante todo una clase, que extiende o hereda de la clase Applet ( o de JApplet bajo Swing). Su caracterstica principal es que se debe ejecutar a travs de un navegador. Para ilustrar la estructura y comportamiento de un applet, se tomar como ejemplo la clase SimpleApplet que es un applet, ya que extiende o hereda de la clase Applet. Contiene mtodos del ciclo de vida del applet y para generar informacin grfica. El nombre del applet es SimpleApplet que extiende la clase Applet. Tiene un SimpleApplet extends Applet private String salida; public void init(); public void start(); public void stop(); public void destroy(); void agregaItem(String palabra); public void paint(Graphics g);La clase Applet : Estructura de un Applet 6 - 6 atributo salida de tipo String y se compone de seis mtodos: los cuatro primeros heredados de la clase Applet (ver el cuadro anterior), el mtodo agregaItem(String palabra) con el cual se agrega una palabra a salida y el mtodo paint(Graphics g), con el cual el applet dibuja en la ventana el contenido de salida. Los applets heredan los mtodos de dibujo y manejo de eventos de la clase AWT (Abstract Window Toolkit). El concepto de dibujo, en este contexto, se refiere a la representacin de un applet en la pantalla. El manejo de eventos se refiere a la deteccin y procesamiento de las entradas generadas por el usuario, como pulsacin de teclas, movimientos del ratn, cierre de ventanas o salvar archivos, por mencionar algunos.

Ls Applets tienen lo que se denomina, un ciclo de vida, desde su inicio, arranque y ejecucin, hasta su cierre y destruccin. A lo largo de ese ciclo de vida es, el programa applet es activado por eventos, los cuales llamarn, segn sea el caso, a uno u otro mtodo para su ejecucin. Los eventos que se generan en las interacciones del usuario, son los que determinan la accin a ser tomada por el applet. Su estructura se conforma por un conjunto de mtodos para el tratamiento de esas interrupciones. El usuario es el que inicia la interaccin con el applet, interactuando con este, como y cuando quiera. Estas interacciones son notificadas como eventos por el AWT, llamando al gestor de eventos que el applet ha sobrescrito, para que este tome la accin apropiada y retorne el control al AWT. Pulsar un boton del ratn dentro de la ventana de un applet, genera un evento de botn pulsado. Pulsar una tecla mientras la ventana del applet est activa, genera un evento de tecla pulsada. Pasar el cursor sobre una parte de la ventana, genera un evento. Salir o entrarde la ventana del applet, cerrarla, minimizarla, producen eventos que afectan el comportamiento del applet. Los applets estn diseadas para contener componentes, o sea objetos de una interface de usuario UI (User Interface por sus siglas en ingles), como botones, etiquetas, listas y menus desplegables, barras de desplazamiento, reras de texto. El ciclo de vida de un Applet El concepto de ciclo de vida de un applet, hace referencia al conjunto de operaciones que se deben realizar desde que se la llama a ejecucin, hasta que se la cierra. Es un conjunto de mtodos que el sistema llama a ejecucin cuando sucede algn evento. La clase Applet provee el marco para la ejecucin de applets, definiendo losLa clase Applet : El ciclo de vida de un Applet 6 - 7 mtodos que el sistema llama cuando ocurren los eventos mas importantes del

ciclo de vida. La mayora de las applets sobreponen algunos o todos los mtodos a fin de responder adecuadamente a los eventos que se presenten. La ejecucin de un applet requiere, en primer lugar, que se haya editado su cuerpo, estructura y comportamiento, y generado el respectivo archivo .class a partir de su compilacin. Se debe escribir un archivo con extension .html, el cual tiene dentro de su cuerpo una etiqueta <applet> dentro de la cual se llama al archivo .class del applet. Este programa es llamado por un navegador o el visualizador appletviewer que viene con el JDK. Veamos ahora los diferentes eventos que se presentan durante el ciclo de vida de un applet. Para tal efecto se tomar la clase SimpleApplet indicado antes, e implementando algunos de sus mtodos. El ciclo de vida se inicia con el llamado a un navegador, o el appletviewer (visor de applets del Java) en la ventana de comandos. Veamos los pasos que se llevan a cabo: 1. El navegador o el appletviewer, leen el programa HTML y buscan la etiqueta <APPLET> que contiene el llamado al archivo .class del applet. El siguiente es el cdigo HTML que se utilizar para llamar al applet SimpleApplet: <HTML> <TITLE> Applet SimpleApplet</TITLE> <APPLET CODE = "SimpleApplet.class" WIDTH = 300 HEIGHT = 150> </APPLET> </HTML> 2. El navegador descompone la etiqueta <APPLET> para localizar el CODEy posiblemente el atributo CODEBASE. Ambos atributos se vern en detalle ms adelante. En nuestro caso se ha utilizado el atributo CODE.

3. El navegador descarga el archivo .class de la direccion URL si se usa CODEBASE o del directorio de su disco duro para el caso del CODE, segn como se haya indicado en el paso anterior. En nuestro caso el archivo SimpleApplet.class, se encuentra en el mismo directorio donde est el archivo .html. 4. El navegador convierte los bytes descargados, del directorio o de la direccion URL, en la forma de una clase Java. 5. El navegador crea una instancia de la clase cargada para formar un objetoLa clase Applet : El ciclo de vida de un Applet 6 - 8 applet. Esto requiere que el applet tenga un constructor sin argumentos. 6. El navegador llama el mtodo init() del applet. Para el caso del applet SimpleApplet.class se tiene el siguiente: public void init() { buffer = new StringBuffer(); agregarItem("Inicializando applet... "); } 7. El navegador llama luego el mtodo start() del applet. public void start() { agregarItem("Arrancando applet... "); } 8. Mientras el applet est ejecutndose, el navegador pasa cualquier evento que tenga que ver con el applet en su interaccin con el usuario, por ejemplo movimiento y presin del ratn, presin de teclas, al mtodo handleEvent(), que es el manejador de eventos del applet. Se lleva a cabo la actualizacin de eventos para indicar al applet que necesita repintarse o sea llamar al mtodo repaint(). En el caso del applet SimpleApplet.class se dibuja un rectngulo alrededor del rea de la ventana del applet, y dentro de este dibuja el estado de la cadena buffer,

por medio del mtodo paint(). Se ilustra adems el mtodo de usuario agregarItem(), el cual genera una salida en la pantalla de comandos por cada interrupcin del applet, el cual llama al mtodo repaint(), que se encarga de volver a dibujar el contenido de la ventana, cuando requiera ser restaurada. void agregarItem(String palabra) { System.out.println(palabra); buffer.append(palabra); repaint(); } public void paint(Graphics g) { g.drawRect(0, 0, getSize().width - 1,getSize().height - 1); g.drawString(buffer.toString(), 5, 15); } 9. El navegador llama al mtodo stop(). Para el caso del applet SimpleApplet.class se ejecuta cuando se detiene el applet. public void stop() { agregarItem("Deteniendo applet... "); }La clase Applet : El ciclo de vida de un Applet 6 - 9 10.El navegador llama al mtodo destroy(). Se ejecuta cuando se cierra el applet. public void destroy() { agregarItem("Preparando descargue de la applet..."); } Mtodos Las diferentes acciones que se llevan a cabo con un applet, surgen de reaccionar automticamente a los siguientes eventos, generados por la interaccin del

usuario: Inicializarse a s misma con el mtodo init(). Arrancar su ejecucin, con el mtodo start(). Detener su ejecucin, con el mtodo stop(). Liberacin de recursos y limpieza para ser descargada, con el mtodo destroy(). Los mtodos init(), start(), stop() y destroy(), forman parte del cuerpo genrico de un applet, como se ilustra a continuacin: public class SimpleApplet extends Applet { ... public void init() { ...} public void start() { ...} public void stop() { ...} public void destroy() { ...} public void paint() { ...} ... } En cada uno de esos mtodos, el programador decidir que comportamiento incluir o simplemente no los usa en su totalidad. El applet SimpleApplet, como cualquier applet, se deriva de la superclase Applet, as como tambin sobrepone o sobreescribe los cuatro primeros mtodos de tal manera que, responda adecuadamente a los diferentes eventos. Veamos en algn detalle cada

uno de estos mtodos:La clase Applet : Mtodos 6 - 10 init( ) Es el primer mtodo que se ejecuta, inicializa el applet cada vez que es cargado o recargado. Se ejecuta una sola vez durante la vida del applet. Es el lugar donde se pueden colocar condiciones iniciales, como inicializar las variables, carga de imgenes, generacin de componentes. En general, en este mtodo se deberan colocar el cdigo que normalmente se pone en un constructor, haciendo el contraste con los programas o aplicaciones desarrolladas en los capitulos anteriores. start( ) Se ejecuta despus de init(), permite iniciar la ejecucin del applet cuando ha sido cargado o reinicia la ejecucin de este, cuando el usuario visita de nuevo la pagina donde se encuentra el applet. stop( ) Detiene la ejecucin del applet, tanto cuando el usuario lo deja o cuando se cierra el visualizador o se deja la pagina donde esta el applet. Cuando se trabaja con hilos (threads) se debe utilizar para suspender aquellos hilos que no es necesario que se ejecuten mientras el applet no es visible. destroy( ) Este mtodo se ejecuta cuando el applet tiene que ser borrado de la memoria, realiza la limpieza y liberacin de recursos como preparacin para el descargue del applet. El mtodo stop() siempre se ejecuta antes de destroy(). No todos los applets requieren sobreponer estos mtodos, algunos son tan simples que no los llaman, simplemente dibujan una salida, usando su propio mtodo paint(). paint( ) Es el mtodo bsico para que el applet despliegue informacin. Es el mtodo

donde ocurre el trabajo real de interaccin grfica del applet. La mayora de los applets implementan este mtodo para dibujar dentro de una pgina del navegador, por ello es necesario sobreescribirlo ya que no hace funcin alguna por defecto. Se ejecuta cuando comienza la ejecucin del applet. Tambin se ejecuta cada vez que se desea volver a pintar la salida del applet, por ejemplo cuando se pone en primer plano la ventana del applet una vez haya sido tapada por otra ventana, o cuando se la restaura despus de habrsela minimizado. El mtodo paint() de la clase Component recibe como argumento un objetoLa clase Applet : Mtodos 6 - 11 tipo Graphics, el cual contiene el contexto grfico, que describe el entorno grfico en el que se ejecuta el applet, o sea el registro de los atributos actuales de la superficie del dibujo, incluyendo, por ejemplo, detalles como la fuente actual y el color a usar en operaciones de dibujo. La clase Graphics contiene los mtodos para dibujar cadenas, lineas, rectngulos y otras figuras, manejo del color, manipulacin de fuentes y otros. Cuando se ejecuta inicialmente un applet, despus de los llamados a init() y start(), es invocado automticamente paint(). Para que se invoque de nuevo paint(), debe ocurrir un evento, por ejemplo el redimensionamiento del applet. Si se requiere llamar a paint() por parte del programador, deber hacerse un llamado a repaint() de la clase Component. update( ) El mtodo update() se utiliza en conjunto con paint() para mejorar el rendimiento de las operaciones de dibujo. Se ejecuta cuando un applet ha solicitado que se vuelva a pintar una parte de su ventana. void update(Graphics g){ ... }

El mtodo update() borra lo que se haya dibujado antes en la ventana del applet, invoca al mtodo paint() y le pasa el objeto Graphics. En la versin por defecto de update(), primero rellena el applet con el color de fondo por defecto y luego llama al mtodo paint(). Si el mtodo paint() llena el fondo con un color diferente al que esta establecido por defecto, se presentar un parpadeo del fondo cada vez que se ejecute update(), o sea que se vuelva a pintar la ventana. Una forma de evitar este parpadeo es sobreescribir update() de tal manera que se realicen en este todas las actividades para pintar la ventana. As, paint() simplemente llamar a update(). repaint( ) Como se expres anteriormente, un applet escribe en su ventana solo cuando se llama a los mtodos update() o paint(). En los casos en que sea necesario actualizar la ventana cuando cambia la informacin a exhibir en esta, por ejemplo de un cartel en movimiento o una animacin, se recurre al mtodo repaint() o repintado. El mtodo repaint() llama al mtodo update() de la clase Component a fin de despejar los dibujos anteriores y luego update() llama a paint() directamente por defecto. El AWT ejecuta el mtodo paint() que puedeLa clase Applet : Mtodos 6 - 12 mostrar la informacin almacenada. As, si parte de un applet requiere mostrar una cadena, esta se puede almacenar en una variable String y luego si llamar a repaint(). Dentro del mtodo paint(), utilizando el mtodo drawString () se puede mostrar la cadena en la ventana. El mtodo repaint() tiene las siguientes formas: repaint( ) Se vuelve a dibujar la ventana completa en la ventana del applet. repaint(int x, int y, int ancho, int alto) Repinta el rectngulo especificado por las coordenadas de la esquina superior

izquierda (int x, int y) y con dimensiones ancho y alto dados en pixeles. Repintar una region de la ventana del applet requiere menos tiempo que si se repinta toda la ventana. repaint(long tiempo) Repinta el componente, llamando a update() despus de que pase un tiempo expresado en millisegundos. repaint(long tiempo, int x, int y, int ancho, int alto) Repinta el rectngulo especificado por las coordenadas de la esquina superior izquierda (int x, int y) y con dimensiones ancho y alto dados en pixeles, despus de que haya transcurrido un tiempo en millisegundos. El siguiente ejemplo ilustra la estructura general de un applet, compuesta por las rutinas o mtodos para el tratamiento de las diferentes interrupciones dentro de su ciclo de vida, desde que se inicia hasta que es terminado. El cdigo HTML que se presenta en seguida se requiere para llamar a la clase SimpleApplet.class en un navegador o en el appletviewer. <HTML> <TITLE> Applet SimpleApplet</TITLE> <APPLET CODE = "SimpleApplet.class" WIDTH = 300 HEIGHT = 150> </APPLET> </HTML> 1.import java.applet.Applet;La clase Applet : Mtodos 6 - 13 2.import java.awt.Graphics; 3.public class SimpleApplet extends Applet { 4. StringBuffer buffer; 5. public void init() { 6. buffer = new StringBuffer();

7. agregarItem("Inicializando applet... "); 8. } 9. public void start() { 10. agregarItem("Arrancando applet... "); 11. } 12. public void stop() { 13. agregarItem("Deteniendo applet... "); 14. } 15. public void destroy() { 16. agregarItem("Preparando descargue de la applet..."); 17. } 18. void agregarItem(String palabra) { 19. System.out.println(palabra); 20. buffer.append(palabra); 21. repaint(); 22. } 23. public void paint(Graphics g) { 24. g.drawRect(0, 0, getSize().width - 1,getSize().height - 1); 25. g.drawString(buffer.toString(), 5, 15); 26. } 27.} Al ejecutarse el applet anterior con el appletviewer, en la pantalla de comandos aparecern diferentes mensajes alusivos a los eventos realizados por el usuario del applet generados por el mtodo agregarItem() con la instruccin System.out.println() de la lnea 19. El applet genera la ventana indicada

en la figura siguiente, en la cual aparece el rectngulo dibujado por el mtodo paint(), en la lnea 24, as como los mensajes dibujados por la instruccin de la lnea 25. Inicializando applet... Arrancando applet... Deteniendo applet... Arrancando applet... Deteniendo applet... Preparando descargue de la applet...La clase Applet : Mtodos 6 - 14 El visualizador appletviewer de Java, trae las opciones de restart, reload, stop, start, close y quit entre otras, para realizar diferentes eventos con el applet mostrada en la ventana de ejecucin.Estas opciones se ilustran en la siguiente figura y se obtienen presionando la etiqueta applet en la ventana generada por el appletviewer. Cargue del applet En la ventana del applet aparecer Inicializando applet...Arrancando Applet..., como resultado de haberse cargado el applet. Al momento de cargar el applet se realizan las siguientes acciones:

La clase Applet : Mtodos 6 - 15 Se crea una instancia del applet. Se inicializa el applet por su propia cuenta. Se inicia la ejecucin del applet. Abandonando y regresando al applet Cuando el usuario abandona el applet, por ejemplo cuando pasa a otra pgina en el navegador o a otra ventana si esta en el visualizador appletviewer, el applet se detiene por si mismo. Cuando se regresa a la ventana o pagina del applet,

este arranca de nuevo. Sucede la misma secuencia cuando la ventana se minimiza y se devuelve a su tamao original. Los mensajes que aparecen en la ventana del applet son Deteniendo Applet...Arrancando Applet... Recargue del applet El appletviewer permite recargar el applet, lo cual se lleva a cabo descargndolo y cargndolo de nuevo automticamente. Antes de que la applet sea descargada, se detiene y realiza una limpieza final, a fin de liberar los recursos del sistema que haba ocupado. Luego si se descarga y se carga de nuevo. Estas operaciones se pueden ver en la ventana de comandos mediante los siguientes mensajes:

Deteniendo Appplet.. Preparando descargue de la applet..... Inicializando applet.... Arrancando applet... Los dos primeros mensajes no se pueden ver en la ventana de la applet ya que esta se ha descargado antes de de que estos textos sean exhibidos. Una vez ha sido recargada se ven los dos ltimos mensajes en la ventana del applet, tambin. Cerrada del navegador Cuando se cierra el navegador o el visualizador de applets, la applet se detiene y realiza la limpieza y liberacin de recursos del sistema. Ejemplos de applets Ejemplo 1: El siguiente applet define un objeto letra del tipo TimesRoman, negrita, de 36 puntos. Con los mtodos setFont y setColor, establece el tipo deLa clase Applet : Ejemplos de applets 6 - 16 letra y el color. Con el mtodo drawString dibuja un mensaje. import java.awt.Graphics; import java.awt.Font;

import java.awt.Color; import java.applet.Applet; public class Ejemplo1 extends Applet{ Font letra= new Font("TimesRoman", Font.BOLD,36); public void paint(Graphics screen){ screen.setFont(letra); screen.setColor(Color.blue); screen.drawString("Bienvenido a applets de Java!!", 5, 40); } } El cdigo HTML es el siguiente: <html> <applet code = "Ejemplo1.class" width = 600 height = 100> </applet> </html> Ejemplo 2: Veamos el siguiente applet que permite dibujar circulos aleatoriamente dentro de la ventana. Solamente utiliza el mtodo paint(). import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; public class Circulos extends Applet{ public void paint (Graphics g){ int posi, posj, i; for (i = 1; i <= 100;i++){ posi = (int)(Math.random()*(getSize().width-20)); posj = (int)(Math.random()*(getSize().height-20));

g.drawOval(posi, posj, 20,20); } } } El archivo HTML en donde el aplet se invoca, es el siguiente: <html> <applet code = "Circulos.class" width = 400 height = 200> </applet> </html>La clase Applet : Ejemplos de applets 6 - 17 Ejemplo 3: import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; public class applet01 extends Applet{ public void paint (Graphics g){ int posi, posj,c1,c2,c3; for(int i = 1; i <= 100; i++){ posi = (int)(600*Math.random()); posj = (int)(600*Math.random()); c1 = (int)(255*Math.random()); c2 = (int)(255*Math.random()); c3 = (int)(255*Math.random()); Color micolor = new Color(c1,c2,c3); g.setColor(micolor); g.fillOval(posi, posj, 20,20); } }

} <html> <applet code = "Circulos.class" width = 400 height = 200> </applet> </html>La clase Applet : 6 - 18