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