You are on page 1of 15

Curso de Java

TEMA 11
APPLETS
Una de las posibilidades más conocidas e interesantes de Java es la utilización de este lenguaje para el desarrollo de aplicaciones que pueden integrarse en el interior de páginas web. Estas aplicaciones denominadas applets, permiten utilizar un navegador no sólo como una herramienta básica para la consulta de información estática, sino también como plataforma de ejecución de programas. Para que suceda esto sin que el visitante de la página web sufra alguna violación de su intimidad o se arriesgue a sufrir daños en su máquina hay ciertas limitaciones que poseen los applets respecto a las aplicaciones normales y son las siguientes:

§ § § §

Un applet nunca podrá ejecutar un programa local de la máquina cliente. Sólo podrá comunicarse con la máquina servidora de la página web pero nunca con otra máquina. No podrá acceder al sistema de ficheros locales, ni para lectura ni para escritura. No podrá recibir información sobre la máquina en la que corre, aparte del sistema operativo, versión d la máquina virtual de Java y algún otro e parámetro del sistema, como la resolución de pantalla, pero nunca podrá averiguar la dirección de correo electrónico, el propietario de la máquina, etc.

Jesús Cáceres Tello

Pág. 1 - 15

applet. import java. contendrá la representación binaria en forma de bytecodes lista para ser interpretada y ejecutada por un navegador. public class PrimerApplet extends Applet { public void paint(Graphics g) { g.</a> </body> </html> Ejemplo 11. es decir.1: Visualización de la ejecución de un applet en Mozilla Jesús Cáceres Tello Pág. <html> <head> <title>Curso de Java : Primer Applet</title> </head> <body> <center><h1>P rimer Applet</h1></center> <br> <applet code=PrimerApplet.25).20.awt. import java.1: Primer applet El resultado en el navegador sería el siguiente: Figura 11.Curso de Java Un primer Applet El siguiente código muestra el famoso programa “Hola Java” esta vez ejecutado y visualizado en un navegador.Graphics . Además se tendrá que codificar una página HTML cuyo único cometido sea el de servir de contenedor al applet. 2 .class.Applet. convirtiéndose en un fichero . } } Una vez escrito este código tendremos que compilarlo.drawString(“Hola Mundo desde un Applet”.class width=300 height=80> Su navegador no es capaz de ejecutar applets escritos en Java o esta función está desabilitada </applet> <br> <a href=”PrimerApplet.java”>C&oacute.15 .digo fuente.

yellow).awt. verdad?. <html> <head> <title>Curso de Java : Segundo Applet</title> </head> <body> <center><h1>Primer Applet</h1> <br> <applet code=SegundoApplet.Applet.2: Visualización de un applet en Explorer Jesús Cáceres Tello Pág.class width=400 height=200> Su navegador no soporta Java </applet> <br> <a href=”mailto:jesus.setColor(Color.300.25. import java.3: Código html para la carga de un Applet Figura 11. Font. //Escribe dentro del óvalo “Curso de Java” g.awt De la misma manera que en el caso anterior tendremos que codificar una página HTML que sirva como encapsulador del applet. import java.awt. 3 . g.caceres@uah.Curso de Java Poco espectacular.awt.Color . } } Ejemplo 11.awt. public class SegundoApplet extends Applet { public void paint(Graphics g) { //Dibuja un óvalo azul g.2: Utilización del objeto Graphics de la librería java.fillOval(50. g.s C&aacute. import java.150) .es”>Jes&uacute.setColor(Color.ceres.100).setFont(new Font(“Helvetica”.applet.20)).drawString(“Curso de Java”.Graphics .blue) . </a> </center> </body> </html> Ejemplo 11.BOLD.130. veamos otro ejemplo utilizando un poco más las posibilidades del objeto Graphics de la librería java. import java. Bueno.Font . g.15 .

como hemos visto anteriormente.class [ALT = texto_alternativo] [NAME = nombre_del_applet] WIDTH=valor HEIGTH = valor .midominio.altura en pixeles del applet .espacio horizontal en pixeles CODEBASE: Si no utilizamos este atributo estamos suponiendo que el archivo de clase del applet está almacenado en el mismo directorio que el archivo HTML en el que está embebido.class" WIDTH=100 HEIGHT=200> </APPLET> Jesús Cáceres Tello Pág. La etiqueta <APPLET> tiene la siguiente sintaxis. debemos utilizar la etiqueta <APPLET> de HTML.class" WIDTH=100 HEIGHT=200> </APPLET> <APPLET CODEBASE="http://www. Esto permite al navegador tener información de la existencia de código Java.anchura en pixeles del applet .codigo base del applet .espacio vertical en pixeles . Con CODEBASE podemos definir una localización distinta. [<PARAM NAME=parametroN VALUE=valorN>] [ codigo HTML alternativo] < /APPLET> Sintaxis de la etiqueta <Applet> en HTML ..archivo de codigo del applet [ALIGN = ( left | right | top | textop | middle | absmiddle | baseline | bottom | absbottom ) ] [VSPACE = valor ] [HSPACE = valor ] > [<PARAM NAME=parametro1 VALUE=valor1>] .com/miSub " CODE="MiApplet. 4 .. <APPLET CODEBASE="MiSub" CODE="MiApplet.15 . donde los elementos entre corchetes son opcionales: <APPLET [CODEBASE= URL_base] CODE = nombreclase.Curso de Java Atributos de la etiqueta <APPLET> Para poder embeber un programa Java en una página Web.

. por ejemplo: URL URLImagen= getDocumentBase ()."imagenes/pi. en su porción de código Java.gif"). etc. } donde Stringsonido es una cadena con el URL a abrir. Utilizando un objeto de tipo URL. 3. Primero debemos averiguar el URL del documento HTML y seguidamente obtenemos el objeto de imagen . sonidos. Image MiImagen = getImage(URLImagen.Curso de Java Hay que mencionar que un applet únicame nte puede acceder a archivos localizados en el mismo servidor Web donde está. Por último intentamos cargar el archivo de sonido: AudioClip miSonido = getAudioClip (URLsonido).au"). // obtiene el URL del applet AudioClip MiSonido= getAudioClip (URLSonido. 2. De modo relativo al propio applet.applet. Para abrir un archivo utilizando un URL primero se declara una variable URL con valor inicial null: URL URLsonido=null. De modo relativo al documento HTML en que está embebido.15 . 5 . Una vez que existe esta variable se utiliza una sentencia try-catch para intentar formar el URL: try { URLsonido= new URL (Stringsonido). Lo primero que debemos hacer es averiguar el URL del applet con el método que nos proporciona java. } catch (MalformedURLException e) { . Por lo general un applet puede necesitar abrir archivos de imágenes.Applet y a continuación obtenemos el objeto de sonido o imagen (en este caso sonido): URL URLSonido = getCodeBase (). Jesús Cáceres Tello Pág."sonidos/pi. Esto lo puede hacer de tres maneras: 1.

WIDTH y HEIGHT: Permiten especificar el ancho y la altura del applet. texttop.Curso de Java CODE: Especifica el nombre del archivo que contiene el bytecode del applet.elMetodo ( ). el archivo con extensión .15 . el propio applet puede redimensionarse con el método resize ( ). En applet1 podemos tener las siguientes líneas: //obtiene una referencia a applet2 Applet deApplet2=getAppletContext( ).class. mientras que el segundo hace posible abrir URLs. El primero permite enviar mensajes al área de estado del navegador. pues el navegador puede obviarlo. es decir. El método getApplet() se utiliza para obtener una referencia la applet “applet2” a través de getAppletContext() . Sin embargo. bottom. Esto es muy útil cuando queremos comunicar nuestros applets entre sí. absbottom. // llama a un metodo applet2 ((nombreClaseApplet2) deApplet2). top. ALIGN: Permite el alineamiento de los applets. Sus valores son : left. NAME: Nombra unívocamente nuestro applet. el texto aparecerá a la derecha y viceversa. absmiddle. baseline. middle. respectivamente. Jesús Cáceres Tello Pág.getApplet("applet2"). la primera vez que éste se ejecuta. right. 6 . Figura 11. Por ejemplo.3: Comunicación entre dos applets Dos de los métodos más importantes que podemos utilizar sobre el contexto del applet son: showStatus(string mensaje) y showDocument(URL unURL). Cuando se alinea el applet hacia la izquierda o hacia la derecha. el texto que sigue al applet se dispone adecuadamente: si el applet está en la izquierda. tenemos dos applets en una página con los nombre applet1 y applet2. con lo que indicamos que se busque el applet llamado “applet2” en el navegador y que nos dé una referencia a su posición. Pero nunca podemos estar seguros de si resize ( ) trabaja correctamente.

4: Utilización de getParameter en el método inicial del applet init() Jesús Cáceres Tello Pág. pv = getParameter( "velocidad" ). else velocidad = Integer. ALT: Especifica el texto alternativo que debe mostrarse en navegadores basados sólo en texto. public void init() { String pv. que devuelve un string: String stringColor = getParameter(“color”).parseInt( pv ). Navegadores sin Java: En el caso de que un navegador no ofrezca Java.Curso de Java VSPACE y HSPACE: El primero especifica cuánto espacio en píxeles aparecerá por encima o por debajo del applet. Para ello incluiremos una porción de HTML estándar entre el comienzo y el cierre de la etiqueta del applet. } Ejemplo 11. podemos mostrar un mensaje en el momento en que se llegue al applet en la página. El segundo especifica el espacio horizontal. if( pv == null ) velocidad = 10. el cual incoluye un nombre de parámetro y un valor string asociado a él que deberá situarse entre las dos etiquetas del applet: <PARAM NAME=color VALUE=”azul”> Para consultar un parámetro dentro del fichero Java se utiliza el método getParameter(). Parámetros del Applet: Se puede proporcionar al applet parámetros mediante el atributo PARAM. a la izquierda y a la derecha también en píxeles. 7 .15 . es decir.

4: Utilización de appletviewer para la ejecución de un applet Jesús Cáceres Tello Pág. 8 . compatible con Java. si se desea que el applet muestre contenido en pantalla será necesario importar este objeto. De cualquier forma. la invocación a métodos de un applet exigen la utilización de un objeto de tipo Graphics que se haya contenido en el paquete java.Curso de Java La clase Applet La clase Applet proporciona todo lo necesario para el desarrollo de applets. El appletviewer crea un espacio gráfico. Ejecución de un Applet: AppletViewer La ejecución de un applet es diferente a la que se hace con una aplicación en Java. lo cual es realizado incluyendo el paquete java. por lo tanto. Como todos los applets se ejecutan sobre una ventana es necesario incluir el soporte para trabajar con ventanas.applet. Utilizar un visualizador de applets incluido en el Kit de Desarrollo de Java (JDK) llamado appletviewer. Esta clase está contenida en el paquete java. Realmente hay dos formas de ejecutar un applet: • • Ejecutando el applet dentro de un navegador web que tenga la máquina virtual instalada.applet y tiene algunos métodos que permiten un control detallado de la ejecución de un applet.15 . es decir. proporcionan un conjunto de herramientas para diseñar interfaces gráficas de usuario. carga las clases y permite que estas manipulen el espacio gráfico definido. por lo que todas deben importar el paquete java. Figura 11. como se ha visto en temas anteriores. Este visualizador de applets ejecuta el applet en una ventana.awt o bien javax.swing los cuales. Todos los applets son subclases de Applet.awt.

El appletviewer no muestra otras marcas html. El applet libera todos los recursos que hubiese acaparado. Para poder ver el código fuente en el depurador. como resultado de la carga del applet en el navegador. es decir. o bien una URL hacia un fichero html que contenga esa marca. o bien el nombre de un fichero html conteniendo el tag <APPLET>.Curso de Java El appletviewer representa el mínimo interfaz de navegación. el applet se descarga de la memoria y vuelve a cargarse volviendo a comenzar su inicialización. que arranca el applet en el depurador de Java.. En la linea de comando. por ejemplo. Una vez cargado. para ir a la siguiente.". el appletviewer no hará nada.15 .. el applet detiene la ejecución..java con la opción –g. starting. se tiene que compilar el fichero . Después de esto. jdb (java debugger).5: Línea de comandos. volver a cargar la página. Jesús Cáceres Tello Pág. 9 .. detiene su ejecución y ejecuta su finalizador para realizar un proceso de limpieza final de sus trazas. el applet es descargado y vuelto a cargar. Toma como parámetro de ejecución. Figura 11. lo que sucede es lo siguiente: • • • Se crea una instancia de la clase que controla al applet El applet se inicializa a si mismo Comienza la ejecución del applet Cuando se abandona la página. la única opción válida que admite la llamada a appletviewer es –debug. Inicializando el debugger con appletviewer Ciclo de vida de un Applet Lo primero que aparece cuando se ejecuta un applet son los mensajes "initializing. se reanuda la ejecución. Si el fichero html no contiene un tag <APPLET> válido. Cuando se regresa a la página que contiene el applet. Si se utiliza la opción del navegador de Reload.

6: Ciclo de vida de un applet • init() El método init() se llama cada vez que el appletviewer carga por primera vez la clase. la asignación de valores a las variables globales a la clase que se utilicen. Si el applet llamado no lo sobrecarga. La clase Applet tampoco hace nada en este método. • stop() stop() es la llamada para detener la ejecución del applet. Figura 11. Esta función es llamada automáticamente cada vez que la zona de visualización en que está ubicado el applet se expone a la visión. o de la aplicación que está visualizando el applet.Curso de Java Finalmente. el sonido. etc. La clase Applet no hace nada en este método. por ejemplo. Fundamentalmente en este método se debe fijar el tamaño del applet. a fin de optimizar en uso de los recursos del sistema y no ejecutar algo que no puede ser apreciado (aunque el programador puede variar este comportamiento y hacer que un applet siga activo aun cuando esté fuera del área de visión). Las clases derivadas deben sobrecargarlo para comenzar la animación. aunque en el caso de Netscape el tamaño que vale es el que se indique en la línea del fichero html que cargue el applet. También se deben realizar en este método las cargas de imágenes y sonidos necesarios para la ejecución del applet.15 . Se llama cuando el applet desaparece de la pantalla. cuando abandona la página en que Jesús Cáceres Tello Pág. este método únicamente es llamado por el sistema al cargar el applet. Y. cuando se concluye la ejecución del navegador. • start() start() es la llamada para arrancar el applet cada vez que es visitado. En el caso de los applet. etc. se detiene la ejecución del applet y se libera toda la memoria y recursos ocupados por el applet antes de salir del navegador. el sonido. Esta función es llamada cuando el navegador no incluye en su camp o de visión al applet. init() no hace nada. por supuesto. 10 . que debería ser sobrecargado por las clases derivadas para detener la animación.

el sistema llama al método paint().4: Ejemplo de implementación del método paint de un applet • update(Graphics g) Esta es la función que realmente se llama cuando se necesita una actualización de la pantalla.30. pero en realidad la llamada se realiza al método update(). public class miApplet extends Applet { public void paint (Graphics g) { g. Por ejemplo. es la clase derivada. la que debería sobrecargar este método para representar algo inteligente en la pantalla.15 . • destroy() El método destroy() se llama cuando ya no se va a utilizar más el applet. } Ejemplo 11. cuando se daña la zona de exposición del applet.*. import java. obviamente. 11 . La clase Applet no hace nada en este método. en realidad se pasa una referencia al contexto gráfico en uso. aunque se puede necesitar invocar a este método.applet.Curso de Java está insertado.*. La clase Applet simplemente dibuja un rectángulo gris en el área. cuando se necesita que sean liberados todos los recursos dispuestos por el applet. Cada vez que la zona del applet es cubierta por otra ventana. pasando como argumento un objeto de tipo Graphics que delimita la zona a ser pintada. y que representa la ventana del applet en la página web. y luego recuperar su actividad mediante el método start(). cuando se cierra el navegador. de forma que el programador puede paralizar los threads que no resulten necesarios respecto de un applet no visible. tras haber rellenado la zona del Jesús Cáceres Tello Pág. Las clases derivadas deberían sobrecargarlo para hacer una limpieza final. import java. se desplaza el applet fuera de la visión o el applet cambia de posición debido a un redimensionamiento del navegador.awt. cuyo comp ortamiento establecido en la clase Component es llamar al método paint(). Los applet multithread deberían utilizar destroy() para detener los threads que quedasen activos. Métodos de un Applet Los principales métodos de un applet son los siguientes: • paint(Graphics g) Es la función llamada cada vez que el área de dibujo del applet necesita ser refrescada. el sistema llama automáticamente a este método. Esta funcionalidad es suficiente para la mayoría de los casos.30).drawString("Hola Mundo". por ejemplo. La clase Applet simplemente limpia el área y llama al método paint().

} Ejemplo 11. } } // Fin de clase mi_applet Ejemplo 11.. Pudiera parecer así que se trata de un método de efecto neutro. } x += 10. pero si la función paint() cambiara el color del fondo. x. x="+x ). //garantiza la pantalla limpia repaint(). 25 ). } catch (InterruptedException e) { } repaint().5: Ejemplo de implementación del método update de un applet • repaint() Llamando a este método se podrá forzar la actualización de un applet.25. .drawString( "Hola.Curso de Java applet con su color de fondo por defecto. Pero hay que tener cierto cuidado. import java.drawString( "Otra información".15 . g. la hora actual es . podríamos percibir un efecto de cambio de colores nada agradable. import java. public void paint( Graphics g ) { Date d = new Date(). ya que si se llama frecuentemente a update(). Este efecto se remedia sobrecargando el método update(). Otra solución sería insertar el código de pintado en una sobrecarga del método update() y escribir un método paint() que sólo llame a update().50 ). para que llame únicamente a paint().update() } else //Información adicional g. para evitar el mismo desagradable efecto.clear(). public void update( Graphics g ) { if( estaActualizado ) { g. public class reloj extends Applet { int x = 10. AWT ignorará las llamadas que estime oportuno ya que considera que las llamadas a esta función deben realizarse de forma responsable. Aunque todo se reduce a usar el mismo método setBackground(Color).sleep(1000).6: Utilización de repaint en un applet con hilos Jesús Cáceres Tello Pág.. 50).".Date. g. System. x. if ( x < 150 ) { try { Thread.. llamando a update(). Estas son las mismas razones que aconsejan usar el método resize() insertándolo en init().util. estimando que sucesivas llamadas a este método no responden a su naturaleza..drawString(d.println( "Redibujo. 12 . en el método init() para así evitar el efecto visual sin tener que sobrecargar el método update(). // podemos usar el método padre: super.toString().out.

drawLine(220. p. import java.270. Font letra = new Font("Verdana". setBackground(bgkcolor). p.180).180.282. p.280.setColor(Color.283.0.90).240. p.90.305).280.90. p.drawLine(223.150.drawString("Esto es un Applet de Java".110. p. int y[] = {210. p.280.270.60).285.drawLine(225. p.128).180.drawString("Dibuja una X:". p.drawLine(222.90).240}.280.setColor(xxcolor). p. Font letra2 = new Font("Verdana". 18).drawLine(220. p.180.180.drawLine(221.281. p. p.270.fillOval(105. Font. p. p. p. Font. p. 13 .150.180).210.180). p.setColor(rectcolor). Color xcolor = new Color(215.280.90.90).230.awt.drawLine(220.270.0).setColor(Color.90).blue).215.y.fillRect(20.applet.0). Color xxcolor = new Color(0.130. p.90. Color rectcolor = new Color(255.BOLD.210.90). p.80.90.fillPolygon(x.drawString("Dibuja un círculo:".250.drawLine(220.12).setColor(xcolor).setFont(letra2).105.180). import java.95}.155.165.280.90). p.50.80.90. 12). p.15 .drawLine(220.setFont(letra). p.drawString("Dibuja un rectángulo:".30). p.180. int x[] = {80. Diseña una página web para cargar este applet y visualiza el resultado.90).drawLine(220. p.130.255.90).20.180).70.20.195).Applet.110.white).180).30.210.280.drawLine(220. p.180.80).drawString("Dibuja una X con forma y relleno:".225). } } Jesús Cáceres Tello Pág. public class applet3 extends Applet { public void paint(Graphics p) { Color bgkcolor = new Color(176.0.180.180.drawLine(224.Curso de Java Laboratorio El siguiente applet utiliza algunas funcionalidades gráficas del objeto Graphics. Podéis hacer modificaciones tanto de color como de figuras para conocer más de cerca las posibilidades que nos ofrece este objeto.BOLD.90.*. p.284.

se sitúa un canvas en el que tiene lugar la representación gráfica de los datos. Cada dato está en una fila y todos ellos en una única una columna. Sobre el Panel3 se sitúa el control área de texto y el Panel2. Se disponen los controles sobre sus respectivos paneles aplicando el gestor de diseño FlowLayout. 14 . Jesús Cáceres Tello Pág. El applet está diseñado de modo que en la parte izquierda se introducen los datos en un control área de texto. luego se introduce otro dato y así sucesivamente. bien sea en forma de tarta o en forma de barras.Curso de Java Ejercicios • Diseñar un applet para el dibujo de gráficas a partir de unos valores dados tal y como se muestra en las siguientes figuras. se sitúan dos botones uno titulado Gráfica para procesar los datos introducidos y otro Borrar. Sobre el applet se sitúa el Panel3 y el canvas. En la parte derecha. Se aplica el gestor de diseño BorderLayout. para eliminar los datos del control área de texto. y sobre el Panel6 los botones de radio titulados Barras y Tarta. Sobre el Panel5 se colocan dos botones titulados Gráfica y Borrar.15 . y prepararlo para introducir otros nuevos. Debajo de estos botones. se pulsa la tecla Retrono o Enter. Se introduce un dato. Para disponer los distintos controles se emplea la aproximación de paneles anidados tal como puede verse en la figura. Debajo del control área de texto. se sitúan un grupo de dos botones de radio que permite seleccionar el tipo de gráfico: diagrama de barras o gráfico en forma de tarta. Sobre el Panel2 el Panel5 y el Panel6.

013e5. Jesús Cáceres Tello Pág.239.Curso de Java A la hora de diseñar Applets gráficos es de suma importancia tener una idea previa de como va a quedar el applet.0001 m3 ºC+ 273 ºK Para estas conversiones se han creado dos matrices est áticas de constantes: static final double factorIzqDcha[]={0.15 . Para convertir desde el sistema ordinario de unidades empleado en Termodinámica al Sistema Internacional. -273}.013e5 Pa 1 l=0. de esta forma. La cantidad convertida aparece en el control de edición situado en la parte superior derecha del applet. atmósferas por litro (por defecto) o calorías. se procede de modo inverso. la unidad de destino queda automáticamente seleccionada.872e-6. 1000. salvo en el caso de la energía en la que hay una doble opción. 9.872e-3. Como ejercicio alternativo se puede optar por el dibujo de una barra o de un gráfico seleccionando el checkbutton correspondiente anulando. se elige la unidad de origen pulsando en el botón de radio correspondiente a dicha unidad. • Diseñar un applet que tenga como objetivo convertir cantidades expresadas en unidades empleadas habitualmente en Termodinámica en cantidades expresadas en unidades del Sistema Internacional Para pasar desde el Sistema Internacional de Unidades al sistema ordinario de unidades empleado en Termodinámica. Se introduce la cantidad a convertir en el control de edición situado en la parte superior derecha del applet. Finalmente. la unidad de destino queda automáticamente seleccionada. 1.3. 101. se pulsa el botón titulado <<<<. 9.001. o disponer de un esquema similar al de la figura adjunta. Si se selecciona la unidad de origen pulsando el botón de radio situado en el panel izquierdo. la posibilidad de iteracción con el usuario. La cantidad convertida aparece en el control de edición situado en la parte superior izquierda del applet. Finalmente.186.186 J 1 atml=101. static final double factorDchaIzq[]={4. Los factores de conversión que utiliza este applet son los siguientes: 1 cal=4. se pulsa el botón titulado >>>. 15 . 0. se introduce la cantidad a convertir en el control de edición situado en la parte superior izquierda del applet.3 J 1 atm=1. 273}.