Applets Java


En esta p�gina:


Clase Graphics

La clase Graphics dispone de m�s m�todos aparte de drawString, que nos permitir�n dibujar figuras e im�genes.

M�todos de dibujo

Mientras no se especifique, consideraremos que todos los par�metros son enteros:

drawString(String texto,x,y)
Escribe un texto a partir de las coordenadas (x,y).
drawLine(x1,y1,x2,y2)
Dibuja una l�nea entre las coordenadas (x1,y1) y (x2,y2).
drawRect(x,y,ancho,alto)
fillRect(x,y,ancho,alto)
clearRect(x,y,ancho.alto)
Son tres m�todos encargados de dibujar, rellenar y limpiar, respectivamente, un rect�ngulo cuya esquina superior izquierda est� en las coordenadas (x,y) y tienen el ancho y alto especificados.
drawRoundRect(x,y,ancho,alto,anchoArco,altoArco)
fillRoundRect(x,y,ancho,alto,anchoArco,altoArco)
Equivalentes a los anteriores, pero con las esquinas redondeadas. La forma y tama�o de dichas esquinas viene dada por los dos �ltimos par�metros.
draw3DRect(x,y,ancho,alto,boolean elevado)
fill3DRect(x,y,ancho,alto,boolean elevado)
Equivalentes a los primeros, pero dibujan un borde para dar la sensaci�n de que est� elevado o hundido (dependiendo del valor del �ltimo par�metro).
drawOval(x,y,ancho,alto)
fillOval(x,y,ancho,alto)
Dibujan una elipse con esquina izquierda superior en (x,y) y el ancho y alto especificados. Si son iguales dibujar� un c�rculo.
drawArc(x,y,ancho,alto,anguloInicio,anguloArco)
fillArc(x,y,ancho,alto,anguloInicio,anguloArco)
Dibuja una arco cuyo primer v�rtice est� en (x,y) y el segundo en (x+ancho,y+alto). La forma del mismo vendr� dado por los dos �ltimos par�metros.
drawPolygon(int[] coordenadasX,int[] coordenadasY,numCoordenadas)
fillPolygon(int[] coordenadasX,int[] coordenadasY,numCoordenadas)
Dibuja un pol�gono cerrado del n�mero de puntos especificado en el �ltimo par�metro.
copyArea(xOrigen,yOrigen,ancho,alto,xDest,yDest)
Copia el �rea cuya esquina superior izquierda est� en (xOrigen,yOrigen) y de ancho y alto especificados a la zona que comienza en (xDest, yDest).

Por ejemplo, podemos dibujar lo siguiente:

Figurines.java
/**
 * Applet Figurines
 *
 * <APPLET CODE="Figurines.class" WIDTH="200" HEIGHT="70"></APPLET>
 */

import java.applet.Applet;
import java.awt.*;

public class Figurines extends Applet {
  public void paint(Graphics g) {
    g.drawString("Adios, mundo cruel",20,20);
    g.fillRoundRect(10,30,50,20,10,10);
    g.draw3DRect(100,30,50,20,true);
  }
}

Clase Color

Ahora ya sabemos como dibujar, sin embargo todo nos sale en un aburrido blanco y negro... Graphics almacena internamente el color con el que pinta todo, que por defecto es negro. Para poder cambiar dicho color deberemos utilizar el m�todo setColor(), que recibe un �nico par�metro de tipo Color.

La clase Color dispone de varias propiedades est�ticas que contienen los colores m�s comunes; son Color.black (negro), Color.blue (a�il), Color.cyan (azul), Color.darkGray (gris claro), Color.gray (gris), Color.green (verde), Color.lightGray (verde claro), Color.magenta (magenta), Color.orange (naranja), Color.pink (rosa), Color.red (rojo), Color.white (blanco) y Color.yellow (amarillo). Pero tambi�n se pueden crear instancias de color por medio de constructores para definir colores menos comunes. Por ejemplo:

Color c = new Color(int rojo, int verde, int azul)
El color creado tendr� las cantidades de rojo, verde y azul indicadas, las cuales deber�n estar en un rango que va de 0 a 255.
Color c = new Color(int rojo, int verde, int azul, int alfa)
Id�ntico al anterior, pero a�ade un canal alfa que indica el grado de transparencia. S�lo funciona con el JDK 1.2.

Cambiando el ejemplo anterior:

FigurinesColor.java
/**
 * Applet FigurinesColor
 *
 * <APPLET CODE="FigurinesColor.class" WIDTH="200" HEIGHT="70"></APPLET>
 */

import java.applet.Applet;
import java.awt.*;

public class FigurinesColor extends Applet {
  public void paint(Graphics g) {
    g.drawString("Adios, mundo cruel",20,20);
    g.setColor(Color.green);
    g.fillRoundRect(10,30,50,20,10,10);
    g.setColor(new Color(30,40,50,100));
    g.fill3DRect(50,40,50,20,true);
  }
}

Manejo de im�genes

A�n cuando podemos hacer cosas chulas con figuras, no estar�a de m�s poder hacer cosas con im�genes, que son bastante m�s espectaculares. Para hacerlo deberemos utilizaremos el siguiente m�todo:

drawImage( Image img,int x,int y,ImageObserver observador )

Vemos que necesitamos un objeto Image y otro ImageObserver y de esas cosas no sabemos todav�a... No vamos a ver estos objetos muy a fondo. ImageObserver es un interfaz (que un antepasado de Applet implementa) que nos ofrece informaci�n sobre la imagen seg�n la imagen se carga de la red. Por otro lado, Image es un objeto que representa a la imagen. Normalmente crearemos un objeto Image por medio del m�todo de Applet getImage():

Image img = getImage(URL base, String fichero)
Asigna la imagen contenida en la URL donde se encuentre el fichero que contiene la imagen que queremos presentar y el nombre de ese fichero.

Normalmente obtendremos esa direcci�n a partir de la p�gina donde est� la p�gina HTML o nuestro applet. Para averiguarlo disponemos de dos m�todos en la clase Applet:

URL getDocumentBase()
Devuelve la URL donde est� la p�gina HTML (excluyendo el nombre del fichero).
URL getCodeBase()
Devuelve la URL donde est� el applet (excluyendo el nombre del fichero).

Si deseamos obtener una URL distinta deberemos importar esa clase (java.net.URL) y crear uno pas�ndole una cadena como par�metro al constructor conteniendo la URL.

Normalmente, se realiza el getImage() en el m�todo init() del applet, ya que en el momento en que ejecutemos este m�todo comenzar� la carga de im�genes desde Internet y eso conviene hacerlo cuanto antes. Para mostrar la imagen se utiliza el m�todo paint(), al igual que hemos hecho para pintar cosas. Por ejemplo, suponiendo que tengamos un fichero llamado home.jpg:

Grafico.java
/**
 * Applet Grafico
 *
 * <APPLET CODE="Grafico.class" WIDTH="200" HEIGHT="70"></APPLET>
 */

import java.applet.Applet;
import java.awt.*;

public class Grafico extends Applet {
  Image img;
  public void paint(Graphics g) {
    img = getImage(getDocumentBase(), "home.jpg");
  }
  public void paint(Graphics g) {
    g.drawImage(img,x,y,this);
  }
}