Guión De La Práctica 13 (formato*)

Preview only show first 6 pages with water mark for full document please download

Transcript

3UiFWLFD San Sebastián, mayo 1999 3URJUDPDFLyQ-DYD -DYLHU*DUFtDGH-DOyQÂ -RVp,JQDFLR5RGUtJXH] $OIRQVR%UD]iOH]Â $OEHUWR/DU]DEDOÂ -HV~V&DOOHMDÂ -RQ*DUFtD Informática 2: Práctica nº 13 página 1 INDICE Ejercicio 1: Ejercicio 2: Ejercicio 3: Ejercicio 4: Ejercicio 5: Ejercicio 6: Mensajes desde un applet .................................................................................................................. 1 Mensajes desde un applet 2 ............................................................................................................... 3 Cargar una imagen JPEG en un applet o aplicación.......................................................................... 3 Cargar una imagen JPEG en un applet o aplicación adaptándola al tamaño del panel o ventana ..... 4 Crea la clase Osciloscopio con una imagen estática.......................................................................... 4 Crea la clase Osciloscopio2, incluyendo animación.......................................................................... 5 Antes de comenzar la práctica abre el Windows Explorer y comprueba que se ha creado de modo automático en tu disco G:\ un directorio llamado Inf2prac13. No deberás moverlo a otro subdirectorio ni cambiarle de nombre. Por motivos de orden es importante que todos los ejercicios de esta práctica se creen dentro de este directorio, porque esta semana se recogerá la práctica. Como recomendación general, mantén abierto el Windows Explorer y comprueba de vez en cuando que los proyectos de los distintos ejercicios se están guardando correctamente. Hay que evitar copiar los ejercicios de otra persona, principalmente porque así no se aprende a programar: a programar sólo se aprende programando. Puedes utilizar también Windows Explorer para ayudar a Visual J++ 6.0 a crear un proyecto nuevo a partir de los ficheros del anterior. Ejercicio 1: Mensajes desde un applet Crea un proyecto llamado Ejer1 en el directorio de la práctica. En este ejercicio se trata de crear un applet que envíe mensajes al usuario y que pueda trabajar también como aplicación. Por lo demás, lo único que hace es escribir “Hola” en un panel de 300x200 pixels. El fichero HTML se llamará Prueba1.htm y contendrá las siguientes sentencias: Mensajes desde un applet

Envío de mensajes desde un applet

Después de crear este fichero se debe crear la clase principal del programa que se llama Mensajes. El fichero se llamará Mensajes.java y contendrá las siguientes sentencias: // fichero Mensajes.java import java.applet.*; import java.awt.*; public class Mensajes extends Applet { // Variable miembro boolean aplicacion = false; Informática 2: Práctica nº 13 página 2 public void start() { //la siguiente sentencia sólo ejecutando como applet if (aplicacion==false) { this.getAppletContext().showStatus("Ejecutando el metodo start()"); } System.out.println("Ejecutando el metodo start()"); } public void stop() { //la siguiente sentencia sólo ejecutando como applet if (aplicacion==false) { this.getAppletContext().showStatus("Ejecutando el metodo stop()"); } System.out.println("Ejecutando el metodo stop()"); System.out.flush(); } public void paint(Graphics g) { g.setFont(new Font("serif", Font.BOLD, 24)); g.drawString("Hola", 100, 100); } // programa principal para ejecutarse como aplicación public static void main (String[] args) { Mensajes ms = new Mensajes(); VentanaCerrable vc = new VentanaCerrable("Mensajes"); vc.setSize(300, 200); vc.setLocation(100, 100); vc.add(ms, "Center"); vc.show(); ms.aplicacion = true; ms.init(); ms.start(); } } // fin de la clase mensajes Entre los aspectos interesantes de este ejercicio está la posibilidad de ejecutarse como applet y como aplicación. Para poderse ejecutar como applet la clase Mensajes deriva de Applet; para ser también una aplicación independiente se ha incluido un método main() que crea un objeto de la clase VentanaCerrable y un objeto de la clase Mensajes, introduciendo este último en la parte central del primero. Obsérvese que como las applets no llaman al constructor, en la clase Mensajes no se ha definido ningún constructor: su papel lo hace el método init(), que debe ser llamado explícitamente en el método main(), al igual que el método start(). Este ejemplo escribe dos tipos de mensajes: uno a través de la barra de estado (con el método showStatus()) y otro a través de la salida estándar System.out, que para las aplicaciones es la consola de MS-DOS y para las applets la JavaConsole de Netscape Navigator o Internet Explorer. Observa que llamar al método showStatus() de la clase Applet no tiene sentido cuando el programa se está ejecutando como aplicación. Cuando un mismo programa tiene que funcionar como applet y aplicación esto puede suceder con bastante frecuencia por distintos motivos. En este caso lo que hay que hacer es definir en la clase Mensajes una variable miembro tipo boolean que permita saber si el programa se está ejecutando como applet o como aplicación. Por defecto esta variable es false, pero si se ejecuta main() se pone a true. Los ficheros para ejecutar este ejercicio están en el directorio Q:\Infor2\Prac13\Ejer1. ¿Qué sucede al ejecutar este programa como applet? ¿Consigues ver los mensajes en la barra de estado de Netscape? La impresión es que los mensajes salen pero que sólo están visibles mientras se ejecutan los métodos start() y stop(), que es un tiempo demasiado corto, pero ¿se muestra de verdad? Para salir de dudas, resuelve el siguiente ejercicio. Informática 2: Práctica nº 13 Ejercicio 2: página 3 Mensajes desde un applet 2 Crea con Visual J++ un proyecto llamado Ejer2 en el directorio de la práctica Inf2prac13. Copia a este directorio los ficheros Mensajes.java y VentanaCerrable.java resultado del ejercicio anterior. Cámbiales el nombre por Mensajes2.java y VentanaCerrableApplet.java. El ejecutable modelo de cómo debe quedar este ejercicio está en el directorio Q:\Infor2\Prac13\Ejer2. Ejecuta este programa como applet y como aplicación y observa lo que ocurre cuando se cambia de página (applet) o se cierra la ventana (aplicación). Este ejercicio tiene dos finalidades: 1. Introducir un tiempo de espera de tres segundos en los métodos start() y stop() de modo que el mensaje en la barra de estado sea apreciable. Para ello se puede utilizar el método sleep() de la clase Thread, pero para utilizar este método hay que obtener una referencia al thread activo con el método currentThread() de la clase Thread, que es un método static. 2. Además hay que modificar la clase VentanaCerrable (ahora VentanaCerrableApplet) de modo que antes de abandona la aplicación en el evento WindowClosing llame al método stop() de la clase Mensajes2. Como dicho método tiene una espera de tres segundos, la ventana tardará tres segundos en cerrarse. Ejercicio 3: Cargar una imagen JPEG en un applet o aplicación Crea un proyecto llamado Ejer3 en el directorio de la práctica Inf2prac13. Copia a este directorio los ficheros Imagen1.java, VentanaCerrable.java y PruebaImagen1.htm que se encuentran en Q:\Infor2\Prac13\Ejer3. Prueba a ejecutar el programa como applet y como aplicación. Como aplicación se basará en una ventana de 400x300 pixels. A continuación se muestra el fichero PruebaImagen1.htm, que incluye una llamada al applet: Imágenes cargadas en un applet

Ejemplo de imágenes cargadas en un applet

La clase Imagen1 debe incluir una imagen llamada Barsa.jpg. Para crear una imagen se debe utilizar el método getImage(). La cosa está en que este método es diferente si se trata de un applet (el método será Applet.getImage()) o de una aplicación (el método será Toolkit.getImage()). Después de cargar la imagen es necesario representarla con el método drawImage() de la clase Graphics, dentro del método paint(). Este programa funciona correctamente como aplicación tanto desde MS-DOS como desde Visual J++. Como applet funciona correctamente desde appletviewer y desde Internet Explorer 4.0, pero falla desde Netscape Navigator 4.5. El resultado de este ejercicio es una imagen como la mostrada en la Figura 1. Informática 2: Práctica nº 13 página 4 Figura 1. Vista parcial de un equipo de fútbol que puede ganar la Liga. Puede comprobarse que la imagen se representa sólo parcialmente, porque su tamaño es más grande que el de la ventana. Ejercicio 4: Cargar una imagen JPEG en un applet o aplicación adaptándola al tamaño del panel o ventana Crea un proyecto llamado Ejer4. Los modelos y el ejecutable de este ejercicio están en el directorio Q:\Infor2\Prac13\Ejer4. El resultado de este ejercicio se muestra en la Figura 2. En este caso la ventana tiene un tamaño de 700x300 pixels. Figura 2. Imagen algo antigua de un equipo que puede ganar la Liga. Fundamentalmente, en este ejercicio se trata de adaptar la imagen al tamaño de la ventana. Para ello se puede utilizar el método getScaledInstance() de la clase Image, que permite cambiar el tamaño de la imagen, conservando o no la proporción entre altura y anchura. Ejercicio 5: Crea la clase Osciloscopio con una imagen estática Crea un nuevo proyecto llamado Ejer5. En este ejercicio se trata una vez más de crear un applet que pueda ser también ejecutado como aplicación. Se trata simplemente de dibujar una función sinusoidal en un panel de 400x 300 pixels, según se puede ver en la Figura 3. El applet muestra un aspecto similar. El fichero que contiene la clase se llamará Osciloscopio.java y el fichero HTML que llama al applet tendrá por nombre PruebaOscilos.htm. Una vez más hará falta también utilizar el fichero VentanaCerrable.java. La función sinusoidal a dibujar responde a la expresión matemática siguiente, Informática 2: Práctica nº 13 página 5 x(t ) = X sin(ωt + ϕ ) (1) donde X es la amplitud, ω la frecuencia natural y ϕ el ángulo de desfase. Otras variables que determinan este problema son las siguientes: T es el tiempo total representado (la anchura de la ventana en segundos) n número de periodos representados (en la Figura 3, 5 periodos) d objeto de la clase Dimension que contiene las dimensiones (anchura y altura) en pixels del panel en el que se realiza el dibujo. Figura 3. Pantalla principal de Osciloscopio ejecutado como aplicación. La relación entre la frecuencia ω y el periodo T/n es la siguiente: ω= 2πn T (2) Para realizar este dibujo se puede utilizar el método drawLine() de la clase Graphics. La línea curva se dibuja como una sucesión de pequeños segmentos rectos. Por ejemplo, en la Figura 3 se han utilizado 20 segmentos por periodo, es decir 100 segmentos en total. Los ficheros ejecutables de este ejercicio que pueden ser utilizados como modelo se encuentran en el directorio Q:\Infor2\Prac13\Ejer5. Ejecútalos como aplicación y como applet observando bien su funcionamiento. Ejercicio 6: Crea la clase Osciloscopio2, incluyendo animación Crea un nuevo proyecto llamado Ejer6. Del ejercicio anterior copia en él los ficheros Osciloscopio.java, PruebaOscilos.htm y VentanaCerrable.java. Al primero de ellos cámbiale el nombre por Osciloscopio2.java. En este ejercicio se trata de modificar el ejercicio anterior para dar animación a los gráficos. La gráfica de la Figura 3 se modificará cambiando el parámetro ϕ, que aparece en la fórmula (1). Se deberá generar una nueva imagen cada 100 milisegundos. La diferencia entre dos imágenes sucesivas será un incremento en el ángulo ϕ de π/24 radianes. Para realizar este ejercicio se recomienda seguir los siguientes pasos: 1. Hacer que la clase Osciloscopio2 implemente la interface Runnable. Esto hará que el método run() del thread que se encargará de la animación se pueda definir dentro de la propia clase Osciloscopio2. Informática 2: Práctica nº 13 página 6 2. La clase Osciloscopio2 definirá como nueva variable miembro una variable boolean llamada running que indicará si la animación está corriendo o no. De esta variable dependerá que el método run() siga ejecutándose o no. Además se definirá una nueva variable miembro de la clase Thread. 3. El método start() de Osciloscopio2 creará un thread pasando a su constructor la referencia this, para indicar que es la propia clase Osciloscopio2 la que proporciona el método run(). Después deberá poner la variable miembro running a true y llamar al método start() del thread. 4. El método stop() deberá poner la variable running a false para que el método run() concluya y se detenga el thread. Es relativamente sencillo realizar este ejercicio introduciendo threads y animación. Es un buen ejemplo de cómo se pueden construir este tipo de aplicaciones. Los ficheros ejecutables de este ejercicio se encuentran en Q:\Infor2\Prac13\Ejer6. Ejecútalos como aplicación y como applet observando bien su funcionamiento.