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);
  }
}