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:&nbsp;
<input type="text" name="x1" value="10" size="5">y1:&nbsp;
<input type="text" name="y1" value="10" size="5">x2:&nbsp;
<input type="text" name="x2" value="100" size="5">y2:&nbsp;
<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