Fuentes de texto en Java

De ChuWiki

Veamos aquí como ver las fuentes de texto disponibles para nuestra aplicación java y un pequeño ejemplo de cómo ir mostrándolas en un JLabel.


Listar las fuentes disponibles[editar]

El código que nos muestra todos los nombres de fuentes disponibles es el siquiente

String[] fontNames=GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
System.out.println(Arrays.toString(fontNames));

Esto sacará un listado largo como el siguiente

[1942 report, Aaron's Hand, Accidental Presidency, Action Man, Action Man Extended, Action Man Shaded, ...]

Usar fuente de texto[editar]

Para usar una de estas fuentes, podemos hacer un new de la clase Font, pasándole tres parámetros

  • Nombre de la fuente. Uno de los String obtenidos con la llamada anterior.
  • Estilo de la fuente. Una constante definida en la clase Font y que puede ser Font.PLAIN, Font.BOLD, Font.ITALIC, ...
  • El tamaño de la fuente, un entero.

Por ejemplo

Font font = new Font("Agency FB", Font.BOLD, 14);

Y ahora solo tendremos que pasarla a cualquiera de nuestros componentes javax.swing o java.awt que tenga el método setFont(), por ejemplo, un JLabel

JLabel label = new JLabel("un texto");
label.setFont(font);


Un ejemplo largo[editar]

El siguiente código, disponible en FontsExample.java recorre todas las posibles fuentes y visualiza cada una de ellas en una ventana durante un segundo, mostrando el nombre de la fuente.

package com.chuidiang.ejemplos.fonts;

import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.util.Arrays;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

/**
 * Example of Fonts.
 * 
 * @author Chuidiang
 * 
 */
public class FontsExample {

   public static void main(String[] args) throws InterruptedException {
      // List all available fonts.
      String[] fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment()
            .getAvailableFontFamilyNames();
      System.out.println(Arrays.toString(fontNames));

      // A windows with a label.
      JFrame frame = new JFrame("Fonts Example");
      JLabel label = new JLabel();
      label.setHorizontalAlignment(SwingConstants.CENTER);
      frame.getContentPane().add(label);
      frame.setSize(400, 100);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);

      // Show a text for each font
      for (String font : fontNames) {
         label.setText("Hi, I'm " + font);
         label.setFont(new Font(font, Font.PLAIN, 15));
         Thread.sleep(1000);
      }
   }
}

La siguiente es una captura de la ventana mostrada por el código anterior cuando está mostrando la fuente action man extended