Applets Java


En esta p�gina:


Clase FontMetrics

Vamos a ver c�mo averiguar datos sobre el tipo de letra que se est� utilizando en nuestro applet, principalmente para poder situarlo dentro del applet con mayor precisi�n.

FontMetrics fm = getFontMetrics(getFont());

La clase FontMetrics aporta informaci�n sobre las dimensiones del tipo de letra. Dispone de muchos m�todos, pero normalmente usaremos s�lo dos:

int fm.getHeight()
Devuelve la altura en pixels de un car�cter del tipo de letra actual.
int fm.stringWidth(String)
Devuelve el ancho en pixels de una cadena escrito con el tipo de letra actual.

Nos aprovecharemos de estas cositas para hacer que nuestro applet con el texto desplaz�ndose coloque el texto en el centro del applet y nos vuelva a mostrar el mismo por la derecha cuando salga por la izquierda:

MostrarCadena.java
/**
 * Applet MostrarCadena
 *
 * <APPLET CODE="MostrarCadena.class" WIDTH="200" HEIGHT="70">
 *   <PARAM NAME="Cadena" VALUE="Esto s� que es chulo">
 * </APPLET>
 */

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

public class MostrarCadena extends Applet implements Runnable {
  String mensaje;
  int lugar, ancho, alto, anchoMensaje, ,altoMensaje;
  Thread hilo = null;
  Image buffer;
  Graphics pantallaVirtual;
  public void init() {
    mensaje = getParameter("cadena");
    if (mensaje==null)
      mensaje = "Mensaje por defecto";
    ancho = getBounds().width;
    alto = getBounds().height;
    lugar = ancho;
    anchoMensaje = getFontMetrics().stringWidth(mensaje);
    altoMensaje = (getFontMetrics().getHeight()+alto)/2;
    buffer = createImage(ancho, alto);
    pantallaVirtual = buffer.getGraphics();
  }
  public void start() {
    if (hilo==null) {
      hilo = new Thread(this);
      hilo.start();
    }
  }
  public void stop() {
    hilo = null;
  }
  public void paint(Graphics g) {
    g.drawString(mensaje,lugar,altoMensaje);
  }
  public void update(Graphics g) {
    Color colorTemporal = pantallaVirtual.getColor();
    pantallaVirtual.setColor(Color.white);
    pantallaVirtual.fillRect(0, 0, ancho, alto);
    pantallaVirtual.setColor(colorTemporal);
    paint(pantallaVirtual);
    g.drawImage(buffer, 0, 0, this);
  }
  public void run() {
    while (hilo.isAlive()) {
      lugar --;
      if (lugar < (-anchoMensaje))
        lugar = ancho;
      repaint();
      try {
        hilo.sleep(10);
      }
      catch (InterruptedException e) { // No hacemos nada
      }
    }
  }
}