|
![]() |
Escribir Applets Java |
Anterior | Siguiente |
Para escribir applets Java, hay que utilizar
una serie de métodos, algunos de los cuales ya se hay sumariado al hablar de los métodos
del appletviewer, que es el visualizador de applets de Sun. Incluso para el applet más
sencillo se necesitarán varios métodos. Son los que se usan para arrancar (start)
y detener (stop) la ejecución del applet, para pintar (paint) y actualizar
(update) la pantalla y para capturar la información que se pasa al applet desde el
fichero html a través de la marca APPLET. Los applets no necesitan un método main() como las aplicaciones Java, sino que deben implementar (redefinir) al menos uno de los tres métodos siguientes: init(), start() o paint(). Esta función miembro es llamada al crearse el applet. Es llamada sólo una vez. La clase Applet no hace nada en init(). Las clases derivadas deben sobrecargar este método para cambiar el tamaño durante su inicialización, y cualquier otra inicialización de los datos que solamente deba realizarse una vez. Deberían realizarse al menos las siguientes acciones:
Por ejemplo: public void init() { if( width < 200 || height < 200 ) resize( 200,200 ); valor_global1 = 0; valor_global2 = 100; // cargaremos imágenes en memoria sin mostrarlas // cargaremos música de fondo en memoria sin reproducirla } Esta función miembro es llamada cuando el applet no se va a usar más. La clase Applet no hace nada en este método. Las clases derivadas deberían sobrecargarlo para hacer una limpieza final. Los applet multithread deberán usar destroy() para "matar" cualquier thread del applet que quedase activo, antes de concluir definitivamente la ejecución del applet. Llamada para activar el applet. Esta función miembro es llamada cuando se visita el applet. La clase Applet no hace nada en este método. Las clases derivadas deberían sobrecargarlo para comenzar una animación, sonido, etc. public void start() { estaDetenido = false; // comenzar la reproducción de la música musicClip.play(); } También se puede utilizar start() para eliminar cualquier thread que se necesite. Llamada para detener el applet. Se llama cuando el applet desaparece de la pantalla. La clase Applet no hace nada en este método. Las clases derivadas deberían sobrecargarlo para detener la animación, el sonido, etc. public void stop() { estaDetenido = true; if( /* ¿se está reproduciendo música? */ ) musicClip.strop(); } El método init() debería llamar a esta función miembro para establecer el tamaño del applet. Puede utilizar las variables ancho y alto, pero no es necesario. Cambiar el tamaño en otro sitio que no sea init() produce un reformateo de todo el documento y no se recomienda. En el navegador Netscape, el tamaño del applet es el que se indica en la marca APPLET del html, no hace caso a lo que se indique desde el código Java del applet. Variable entera, su valor es el ancho definido en el parámetro WIDTH de la marca html del APPLET. Por defecto es el ancho del icono. Variable entera, su valor es la altura definida en el parámetro HEIGHT de la marca html del APPLET. Por defecto es la altura del icono. Tanto width como height están siempre disponibles para que se puede chequear el tamaño del applet. Se puede retomar el ejemplo de init(): public void init() { if( width < 200 || height < 200 ) resize( 200,200 ); ... Este método se llama cada vez que se necesita refrescar el área de dibujo del applet. paint() es un método de la clase Component, que es heredado por varias clases intermedias y, finalmente, es heredado por la clase Applet. La clase Applet simplemente dibuja una caja con sombreado de tres dimensiones en el área. Obviamente, la clase derivada debería sobrecargar este método para representar algo inteligente en la pantalla. Para repintar toda la pantalla cuando llega un evento Paint, se pide el rectángulo sobre el que se va a aplicar paint() y si es más pequeño que el tamaño real del applet se invoca a repaint(), que como va a hacer un update(), se actualizará toda la pantalla. Se puede utilizar paint() para imprimir el mensaje de bienvenida: void public paint( Graphics g ) { g.drawString( "Hola Java!",25,25 ); // Dibujaremos la imágenes que necesitemos } Esta es la función que se llama realmente cuando se necesita actualizar la pantalla. La clase Applet simplemente limpia el área y llama al método paint(). Esta funcionalidad es suficiente en la mayoría de los casos. De cualquier forma, las clases derivadas pueden sustituir esta funcionalidad para sus propósitos. Se puede, por ejemplo, utilizar update() para modificar selectivamente partes del área gráfica sin tener que pintar el área completa: public void update( Graphics g ) { if( estaActualizado ) { g.clear(); // garantiza la pantalla limpia repaint(); // podemos usar el método // padre: super.update() } else // Información adicional g.drawString( "Otra información",25,50 ); } A esta función se la debería llamar cuando el applet necesite ser repintado. No debería sobrecargarse, sino dejar que Java repinte completamente el contenido del applet. Al llamar a repaint() sin parámetros, internamente se llama a update() que borrará el rectángulo sobre el que se redibujará y luego se llama a paint(). Como a repaint() se le pueden pasar parámetros, se puede modificar el rectángulo a repintar. Este método carga los valores parados al applet vía la marca APPLET de html. El argumento String es el nombre del parámetro que se quiere obtener. Devuelve el valor que se le haya asignado al parámetro; en caso de que no se le haya asignado ninguno, devolverá null. Para usar getParameter(), se define una cadena genérica. Una vez que se ha capturado el parámetro, se utilizan métodos de cadena o de números para convertir el valor obtenido al tipo adecuado. public void init() { String pv; pv = getParameter( "velocidad" ); if( pv == null ) velocidad = 10; else velocidad = Integer.parseInt( pv ); } Indica la ruta http, o el directorio del disco, de donde se ha recogido la página html que contiene el applet, es decir, el lugar donde está la hoja en todo Internet o en el disco. Para imprimir en impresora, al igual que paint() se puede utilizar print(), que pintará en la impresora el mapa de bits del dibujo. No obstante, la clase PrintJob es la que se ha de utilizar para estos menesteres, tal como se verá en otra sección del Tutorial. |
|