Introducción |
La anchura y altura del applet
Los parámetros es la forma en la que se comunica la página web y el applet.
applet2:
Applet2.java
Las dimesiones de la applet se establecen mediante los valores de los parámetros WIDTH y HEIGHT de la etiqueta applet.
La anchura y altura del applet se pueden establecer mediante la función setSize, de la cual existen dos versiones
setSize(400,300);
o bien,
setSize(new Dimension(400,300));
Donde Dimension, es una clase con dos miembros datos públicos width y height. Ambas sentencias establecen la dimensión del applet en 400 pixels de ancho y 300 pixels de alto.
Ahora bien, hemos de tener cuidado con esta sentencia ya que podría plantearse la siguiente situación contradictoria
<APPLET CODE = "applet2.Applet2.class" ARCHIVE = "applet2.jar" WIDTH = 400 HEIGHT = 300 HSPACE = 0 VSPACE = 0 ALIGN = middle > </APPLET> |
public class Applet2 extends Applet{ public void init(){ setSize(150,200); } //... }
En el appletviewer el tamaño de la ventana y tamaño del applet son distintos. La ventana del appletviewer es mayor que el applet. Sin embargo, en Internet Explorer 5.0 la ventana que aparece en el navegador y el applet tienen las mismas dimensiones, las dadas por los parámetros WIDTH y HEIGHT dejando sin efecto la sentencia setSize.
Para evitar posibles inconvenientes, el applet puede leer los datos asociados a los parámetros WIDTH y HEIGHT de la etiqueta APPLET mediante la función getParameter miembro de la clase base Applet, y después pasarle dichos datos a la función setSize para establecer el tamaño del applet.
En la función miembro init, getParameter miembro de la clase Applet lee el dato asociado al parámetro (WIDTH o HEIGHT), y devuelve un string, que ha de convertirse en un dato numérico de tipo int. Los valores numéricos se guardan en las variables locales ancho y alto, y luego, se pasan a la función setSize para establecer el tamaño del applet. De este modo el tamaño y disposición del applet está controlado por la página web en la que está insertado.
public void init(){ int ancho = Integer.parseInt(this.getParameter("WIDTH")); int alto = Integer.parseInt(this.getParameter("HEIGHT")); this.setSize(ancho,alto); }
Como vimos al estudiar el capítulo de las excepciones, la conversión de un string en un número es mejor llevarla a cabo, por razones de seguridad, en un bloque try...catch. En el caso de que el proceso de conversión falle, se crea y se lanza un objeto ex de la clase NumberFormatException que es capturado por el bloque catch para notificar este problema al usuario.
public void init(){ int ancho=400; //valores por defecto int alto=300; try{ ancho = Integer.parseInt(this.getParameter("WIDTH")); alto = Integer.parseInt(this.getParameter("HEIGHT")); }catch(NumberFormatException ex){ System.out.println("Error en los parámetros WIDTH y HEIGHT"); } this.setSize(ancho,alto); }
Normalmente, interrumpimos el proceso de creación del applet con el asistente en el primer paso, pero como ya se ha comentado, JBuilder nos proporciona un diálogo para añadir parámetros a la etiqueta APPLET.
En el segundo paso del asistente de creación de applet Applet Wizard Step 2 of 3 podemos definir los parámetros, generándose automáticamente el código que llee los valores asociados a dichos parámetros.
Los parámetros que vamos a definir son tres, la posición (ABSCISA y ORDENADA) del mensaje que se va a imprimir en el applet, y el MENSAJE mismo. En la figura y en el cuadro adjunto se muestra la definición de cada uno de los parámetros
Nombre | Tipo | Variable | Valor por defecto |
ABSCISA | int | x | 10 |
ORDENADA | int | y | 20 |
MENSAJE | String | texto | El primer applet |
Una vez completado el primer parámetro, se pulsa el botón titulado Add Parameter para continuar con el siguiente. El campo titulado Desc corresponde a la descripción del parámetro que es opcional.
Una vez pulsado el botón Finish, JBuilder genera los parámetros en el archivo .html, y genera el código fuente que lee los valores asociados a dichos parámetros, tal como se ve en los dos cuadros que se muestran a continuación. Asimismo, genera una función la redefinición de getParameterInfo de la clase base Applet que devuelve la información relativa a los parámetros pero que no tiene de momento interés
<APPLET CODEBASE = "." CODE = "applet2.Applet2.class" NAME = "TestApplet" WIDTH = 400 HEIGHT = 300 HSPACE = 0 VSPACE = 0 ALIGN = middle > <PARAM NAME = "ABSCISA" VALUE = "10"> <PARAM NAME = "ORDENADA" VALUE = "20"> <PARAM NAME = "MENSAJE" VALUE = "El primer applet"> </APPLET> |
El código generado por JBuilder incluye la definición de una función auxiliar getParameter con dos argumentos, el nombre del parámetro y su valor por defecto, esta función llama a getProperty de la clase System
public class Applet2 extends Applet { boolean isStandalone=false; int x; int y; String texto; //Get a parameter value public String getParameter(String key, String def) { return isStandalone ? System.getProperty(key, def) : (getParameter(key) != null ? getParameter(key) : def); } public void init() { try { x = Integer.parseInt(this.getParameter("ABSCISA", "10")); } catch (Exception e) { e.printStackTrace(); } try { y = Integer.parseInt(this.getParameter("ORDENADA", "20")); } catch (Exception e) { e.printStackTrace(); } try { texto = this.getParameter("MENSAJE", "El primer applet"); } catch (Exception e) { e.printStackTrace(); } try { jbInit(); } catch (Exception e) { e.printStackTrace(); } } //... } |
Podemos optar por conservar el código generado por el IDE o escribir nuestro propio código, de forma semejante al que hemos escrito para leer los parámetros WIDTH y HEIGHT. Ahora bien, los valores devueltos por getParameter y después convertidos se deben de guardar en variables de instancia para que luego puedan ser utilizadas por otras funciones miembro. Así, el valor del parámetro ABSCISA se guarda en el miembro dato x, el valor del parámetro ORDENADA en y, y el valor del parámetro MENSAJE en texto.
En la redefinición de paint, se muestra en el contexto gráfico g, el contenido del mensaje guardado en texto en la posición x e y mediante la llamda a la función drawString.
public class Applet2 extends Applet { int x; int y; String texto; public void init() { int ancho=250; //valores por defecto int alto=100; x=10; y=20; try{ ancho=Integer.parseInt(this.getParameter("WIDTH")); alto=Integer.parseInt(this.getParameter("HEIGHT")); x=Integer.parseInt(this.getParameter("ABSCISA")); y=Integer.parseInt(this.getParameter("ORDENADA")); }catch(NumberFormatException ex){ System.out.println("Error en los parámetros"); } texto=this.getParameter("MENSAJE"); this.setSize(ancho,alto); } public void paint(Graphics g){ g.drawString(texto, x, y); } } |