Download ApoyoLab1 - Universidad de La Serena
Document related concepts
no text concepts found
Transcript
Dr. Eric Jeltsch F. Programación en Java2 Parámetros en Applet Apoyo a Lab. 1 1) Customizing Applets via el parametro HTML Tag A través de Internet es posible pasar información a los applet como aplicaciones independientes desde botones u otros elementos gráficos. En el caso de los applet, se les puede pasar parámetros a partir del archivo de HTML. Basta con colocar una o más etiquetas<param> en el archivo de HTML entre las etiquetas <Applet> y </Applet>. El formato es el siguiente: <param name="nombrecadena" value="valorcadena"> Para tener acceso a los elementos String "nombrecadena" y "valorcadena", un applet debe llamar al método getParameter(). Un ejemplo típico es: <Applet code=miparametro.class width=450, height=230> <Param name=”primerparametro” value=”prueba”> <Param name=”segundo” value=”100”> </Applet> Ahora para acceder a los parametros de HTML desde el applet, se debe utilizar el método getParameter(), como se muestra a continuación. String s = getParameter(“primerparametro”); //s String “prueba” String s2 = getParameter(“segundo”); // s2 es el String 100 int segundo_valor= Integer.parseInt(s2); // convertir s2 a un número. Para tener acceso al valor de un parametro de HTML, se pasa su nombre al método getParameter(), que a su vez devuelve un valor tipo String que contiene el valor correspondiente al parametro. En este caso, como el valor del preimer parametro es una cadena (String), el applet puede utilizar el valor independientemente después de la llamada a getParameter(). El segundo parametro es el valor entero 100. Mediante el método parseInt(), el applet convierte la cadena”100” al número 100. Si el applet llama al método getParameter() con el nombre de un parametro de HTML que no existe, getParameter() devuelve null. Observar que en getParameter(String nombre), el string es caso sensitivo. Por ejemplo, supongamos que Ud. desea que la página Web determine el estilo de los font a usar en su applet. Si es así, Ud. podría usar el siguiente código HTML, <applet code="FontParamApplet.class" width=400 height=400> <param name= font value="Helvetica"> </applet> De donde su applet debería tener un segmento como el siguiente public class FontParamApplet extends Japplet { public void init() { String fontNombre = getParameter(“font”); }... } ________________________________________________________________________ Area de Computación, Universidad de La Serena 1 Dr. Eric Jeltsch F. Programación en Java2 Parámetros en Applet Ahora si Ud. quisiera agregar el tamaño de un parametro para el font, entonces el código HTML se vería así: <applet code="FontParamApplet.class" width=400 height=400> <param name= font value="Helvetica"> <param name=tamaño value=”24”> </applet> De donde su applet debería tener entonces un segmento como el siguiente: public class FontParamApplet extends Japplet { public void init() { String fontNombre = getParameter(“font”); int fontTam= Integer.parseInt(getParameter(“tamaño”)); ... } } El ejemplo siguiente muestra como se puede especificar un applet en un documento Web. El Applet que se especifica en la etiqueta del applet muestra el texto “Applet son bichos!” en las coordenadas 50, 50 dentro del area de muestra 300*300 del applet. <HTML> <HEAD> <TITLE>Usando la etiqueta(Tag) Applet</TITLE> </HEAD> <BODY> <H1>Un Applet que despliega un Texto, como diseño Local</H1> <APPLET CODE="DemoApplet.class" HEIGHT=300 WIDTH=300> <PARAM NAME="text" VALUE="Applets son bichos!"> <PARAM NAME="x" VALUE="50"> <PARAM NAME="y" VALUE="50"> Texto desplegado por browsers que no son Java-enabled. </APPLET> </BODY> </HTML> Si es así, el applet debe ser, como lo describe el siguiente programa, import java.awt.*; import java.awt.*; import javax.swing.*; public class DemoApplet extends JApplet { String text = "error"; int x = 0; int y = 20; /* el sistema de ejecución de Java invoca el método init()para ejecutar cualquier inicialización que se requiera, este método usa el método getParameter() de la clase applet para obtener el valor de los parametros, text, x e y. El método parseInt() de la clase Integer se usa para convertir el valor String devueltopor el método getParameter() en un valor int. A lo que ________________________________________________________________________ Area de Computación, Universidad de La Serena 2 Dr. Eric Jeltsch F. Programación en Java2 Parámetros en Applet el sistema invoca al método paint() para actualizar el área de muestra. Como parametro se pasa automáticamente un objeto Graphics, para dibujar en el a´rea de muestra del applet. El método paint()usa el método setFont() de la clase Graphicspara establecer la fuente actual a TimesRoman de 36 puntos negrita y cursiva. Finalmente el método drawString() de la clase Graphics se usa para mostrar el valor de la variable text en la coordenada x.*/ public void init() { text = getParameter("text"); try { x = Integer.parseInt(getParameter("x")); y = Integer.parseInt(getParameter("y")); }catch(NumberFormatException ex){ } } public void paint(Graphics g) { g.setFont(new Font("TimesRoman",Font.BOLD+Font.ITALIC,36)); g.drawString(text,x,y); } } Asi se ve, tras su ejecución. No existe límite sobre el número de param. Por ejemplo, el siguiente applet Planeta.java lo podrá usar como quiera, solo necesita reinventar el titulo y las columnas que se generan, eso si que si quiere cambiar algo substancial del applet, debera entonces ingresar al código. Pero ahora el caso es mostrar como el archivo HTML puede mostrar sus gracias. <APPLET CODE="Planeta.class" WIDTH=400 HEIGHT=300> <PARAM NAME="titulo" VALUE="Diametro de los Planetas"> <PARAM NAME="valores" VALUE="9"> <PARAM NAME="nom_1" VALUE="Mercurio"> <PARAM NAME="nom_2" VALUE="Venus"> <PARAM NAME="nom_3" VALUE="Tierra"> <PARAM NAME="nom_4" VALUE="Marte"> <PARAM NAME="nom_5" VALUE="Jupiter"> <PARAM NAME="nom_6" VALUE="Saturno"> <PARAM NAME="nom_7" VALUE="Urano"> ________________________________________________________________________ Area de Computación, Universidad de La Serena 3 Dr. Eric Jeltsch F. Programación en Java2 Parámetros en Applet <PARAM NAME="nom_8" VALUE="Neptuno"> <PARAM NAME="nom_9" VALUE="Pluton"> <PARAM NAME="valor_1" VALUE="3100"> <PARAM NAME="valor_2" VALUE="7500"> <PARAM NAME="valor_3" VALUE="8000"> <PARAM NAME="valor_4" VALUE="4200"> <PARAM NAME="valor_5" VALUE="88000"> <PARAM NAME="valor_6" VALUE="71000"> <PARAM NAME="valor_7" VALUE="32000"> <PARAM NAME="valor_8" VALUE="30600"> <PARAM NAME="valor_9" VALUE="1430"> </APPLET> De donde el applet se ve así, import java.awt.*; import javax.swing.*; class PlanetaPanel extends JPanel { public PlanetaPanel(double[] v, String[] n, String t) { nombres = n; valores = v; titulo = t; } public void paintComponent(Graphics g) { super.paintComponent(g); if (valores == null || valores.length == 0) return; int i; double minValor = 0; double maxValor = 0; for (i = 0; i < valores.length; i++) { if (minValor > valores[i]) minValor = valores[i]; if (maxValor < valores[i]) maxValor = valores[i]; } Dimension d = getSize(); int clienteWidth = d.width; int clienteHeight = d.height; int barraWidth = clienteWidth / valores.length; Font tituloFont = new Font("SansSerif", Font.BOLD, 20); FontMetrics tituloFontMetrics = g.getFontMetrics(tituloFont); Font labelFont = new Font("SansSerif", Font.PLAIN, 10); FontMetrics labelFontMetrics = g.getFontMetrics(labelFont); int tituloWidth = tituloFontMetrics.stringWidth(titulo); int y = tituloFontMetrics.getAscent(); int x = (clienteWidth - tituloWidth) / 2; g.setFont(tituloFont); g.drawString(titulo, x, y); int top = tituloFontMetrics.getHeight(); ________________________________________________________________________ Area de Computación, Universidad de La Serena 4 Dr. Eric Jeltsch F. Programación en Java2 Parámetros en Applet int bottom = labelFontMetrics.getHeight(); if (maxValor == minValor) return; double escala = (clienteHeight - top - bottom) / (maxValor - minValor); y = clienteHeight - labelFontMetrics.getDescent(); g.setFont(labelFont); for (i = 0; i < valores.length; i++) { int x1 = i * barraWidth + 1; int y1 = top; int height = (int)(valores[i] * escala); if (valores[i] >= 0) y1 += (int)((maxValor - valores[i]) * escala); else { y1 += (int)(maxValor * escala); height = -height; } g.setColor(Color.red); g.fillRect(x1, y1, barraWidth - 2, height); g.setColor(Color.black); g.drawRect(x1, y1, barraWidth - 2, height); int labelWidth labelFontMetrics.stringWidth(nombres[i]); x = i * barraWidth + (barraWidth - labelWidth) / 2; g.drawString(nombres[i], x, y); } } = private double[] valores; private String[] nombres; private String titulo; } public class Planeta extends JApplet { public void init() { String v = getParameter("valores"); if (v == null) return; int n = Integer.parseInt(v); double[] valores = new double[n]; String[] nombres = new String[n]; int i; for (i = 0; i < n; i++) { valores[i] = Double.parseDouble (getParameter("valor_" + (i + 1))); nombres[i] = getParameter("nom_" + (i + 1)); } Container contentPane = getContentPane(); contentPane.add(new PlanetaPanel(valores, nombres, getParameter("titulo"))); } } ________________________________________________________________________ Area de Computación, Universidad de La Serena 5 Dr. Eric Jeltsch F. Programación en Java2 Parámetros en Applet Cuando Ud. navega por Internet, de seguro que ha encontrado applet que están en dominios públicos, de tal forma que Ud. puede usarlos libremente sobre su página Web. Una capacidad natural de tales applet es la habilidad para ejecutar los applet vía parámetros que son sustentados por un archivo HTML que invoca el applet. Por ejemplo, veamos un archivo llamado linea.java, el cual a través de un archivo html se puede activar y hacer que el programa me entregue la gráfica que deseo, en particular los puntos que yo les ingreso por la páginna Web, la que tras la ejecución de la página Web sobre un Browser apropiado me mostrara la nueva versión. Este es el archivo linea.java import java.awt.*; import java.applet.Applet; public class linea extends Applet { int x1, x2, y1, y2; boolean figura = false; public void paint(Graphics g) { if (figura) { g.drawLine(x1, y1, x2, y2); figura = false; } } public void update(Graphics g) { paint(g); } public void figura_linea(int x1, int y1, int x2, int y2) { this.x1=x1; this.y1=y1; this.x2=x2; this.y2=y2; figura = true; //nuevas linea se generan repaint(); } } Este es el archivo linea.html, el cual tiene parametros incorporados que invitan al applet a realizar lo que la página Web desea de él. En este caso que entregue la gráfica, en particular las líneas asociadas al archivo linea.java. <!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> ________________________________________________________________________ Area de Computación, Universidad de La Serena 6 Dr. Eric Jeltsch F. Programación en Java2 Parámetros en Applet <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="GENERATOR" content="Mozilla/4.7 [en] (Win95; I) [Netscape]"> <script language="JavaScript"> var miApplet; // definida global function init() { miApplet = document.linea; } function nuevaLinea(formular) { var x1 = parseInt(formular.x1.value); var y1 = parseInt(formular.y1.value); var x2 = parseInt(formular.x2.value); var y2 = parseInt(formular.y2.value); // llamada al Java-Applets if (miApplet != null) miApplet.figura_linea(x1, y1, x2, y2); } </script> </head> <body onLoad="init()"> <applet code="linea.class" name="linea" width="460" height="300"></applet> <form name="entrada">x1: <input type="text" name="x1" value="10" size="5">y1: <input type="text" name="y1" value="10" size="5">x2: <input type="text" name="x2" value="100" size="5">y2: <input type="text" name="y2" value="100" size="5"> <input type="button" value="Ingrese valor" onClick="nuevaLinea(this.form)"> </form> </body> </html> Archivos Jar Como mencionabamos en los programas anteriores el archivo HTML contiene una línea del tipo <applet code=”etc.class” width=100 height=150>, bien cuando el browser lee esta línea, realiza una conexión con el Web server y trae el archivo etc.class. Es decir la clase loader del Java interprete que es construido en el Browser entonces carga la clase etc.class desde el archivo. En resumen el browser hace una conexión al Web server, y dado que los applet por lo 7 ________________________________________________________________________ Area de Computación, Universidad de La Serena Dr. Eric Jeltsch F. Programación en Java2 Parámetros en Applet general consisten de varias clases, el browser necesitara más tiempo de conexión para invitar todos los .class asociados y así ejecutar el applet, labor que le puede tomar varios minutos. Frente a esta dificultad Java tiene ahora un método apropiado para cargar estos archivos de clases en un solo archivo. Archivos con esta cualidad se llaman Java Archive, con extensión .jar. Ahora estos archivos no necesariamente deben contener clases sino otros tipos de archivos, tales como archivos de audio e imagen. Los archivos JAR pueden ser comprimidos usando un formato similar a los archivos ZIP. Para usar las herramientas jar para hacer archivos JAR(en la instalación por defecto se encuentran en el directorio jdk\bin). En resumen el uso de los archivos JAR puede mejorar sustancialmente el rendimiento del browser Tools La herramienta jar se invoca mediante comandos. Ejemplos: Vamos a usar jar para crear un archivo, llamado edit.jar, el que contiene la compresión de todos los archivos con extensión .class jar cf edit.jar *.class Practiquelo con un programa java que posea varias clases, sugiero el ACBaseDatos.java y vea luego su directorio para verificar que se ha creado el archivo JAR. Y el porcentaje de reducción que experimento su archivo. Ejemplo: Enlistar el contenido del archivo edit.jar. jar tf edit.jar Ud. podrá comprobar que el único archivo que esta fuera de lugar es el archivo en la entrada META-INF/MANIFEST.MF, que es el archivo que se utiliza para mantener un manifiesto del contenido del fichero JAR. Ejemplo: Como incluir el archivo edit.jar en un applet?. La respuesta es agregando el atributo archive=”edit.jar” a la etiqueta del applet. Este atributo le dice al browser o navegador que carge el fichero de archivos edit.jar para buscar el archivo Edit.class y otras clases relacionadas. Asi se vé por lo general el archivo HTML, que se usa para visualizar el applet Edit <html> <head> <title> Edicion de un texto</title> </head> <body> <applet code=Edit.class archive=edit.jar height=400 width=600> </applet> </body> </html> Aplicando el comando >appletviewer Edit.html podrá visualizar el applet correspondiente. ________________________________________________________________________ Area de Computación, Universidad de La Serena 8 Dr. Eric Jeltsch F. Programación en Java2 Parámetros en Applet Ejemplo: Extraer el contenido de un archivo edit.jar La opción x de la herramienta jar le permite extraer el contenido del archivo. Puede usarlo para volver a crear los archivos .class que hubiese eliminado tras la compresión de ellos. jar xvf edit.jar Observar que se crea el directorio META-INF. Este directorio contiene un archivo único de manifiesto que se llama MANIFEST.MF. El archivo de manifiesto identifica cada archivo que hay en el archivo .jar ________________________________________________________________________ Area de Computación, Universidad de La Serena 9