## Crear y Derivar Fuentes

Podemos mostrar una cadena de texto con cualquier fuene disponible en nuestro sistema, en cualquier estilo y tamaño que elijamos. Para determinar las fuentes disponibles en nuestro sistema, podemos llamar al método GraphicsEnvironment.getAvailableFontFamilyNames. Este método devuelve un array de strings que contiene los nombres de familia de las fuentes disponibles. Caulquiera de las cadenas, junto con un argumento tamaño y otro de estilo, pueden ser usados para crear un nuevo objeto Font. Después de crear un objeto Font, podemos cambiar su nombre de familia, su tamaño o su estilo para crear una fuente personalizada.

### Ejemplo: FontSelection

> El siguiente applet nos permite cambiar la fuente, el tamaño y el estilo del texto dibujado.

> Esta es una imagen del GUI del applet. Para ajecutar el appler, pulsa sobre ella. El applet aparecerá en una nueva ventana del navegador.
> El código completo del applet está en FontSelection.java.

> El método getAvailableFontFamilyNames de GraphicsEnvironment devuelve los nombres de familia de todas las fuentes disponibles en nuestro sistema:

>     GraphicsEnvironment gEnv =
>         GraphicsEnvironment.getLocalGraphicsEnvironment();
>     String envfonts[] = gEnv.getAvailableFontFamilyNames();
>     Vector vector = new Vector();
>     for ( int i = 1; i < envfonts.length; i++ ) {
>        vector.addElement(envfonts[i]);
>     }

El objeto Font inicial s ecrea con estilo Font.PLAIN y tamaño 10. Los otros estilos disponibles son ITALIC, BOLD y BOLD+ITALIC.

    Font thisFont;
    ...

    thisFont = new Font("Arial", Font.PLAIN, 10);

Un nuevo Font se crea a partir de un nombre de fuentem un estilo y un tamaño.

    public void changeFont(String f, int st, String si){
      Integer newSize = new Integer(si);
      int size = newSize.intValue();
      thisFont = new Font(f, st, size);
      repaint();
    }

Para usar la misma familia de fuentes, pero cambiando uno o los dos atributos de estilo y tamaño, podemos llamar a uno de los métodos deriveFont.

Para controlar la fuente utilizada para renderizar texto, podemos seleccionar el atributo font en el contexto Graphics2D antes de dibujarlo. Este atributo se selecciona pasando un objeto Font al método setFont. En este ejemplo, el atributo font se configura para usar un objeto font recientemente construido y luego se dibuja la cadena de texto en el centro del componente usando la fuente especificada.

En el método paint, el atributo font del contecto Graphics2D se configura como el nuevo Font. La cadena se dibuja en el centro del componente con la nueva fuente.

    g2.setFont(thisFont);
    String change = "Pick a font, size, and style to change me";
    FontMetrics metrics = g2.getFontMetrics();
    int width = metrics.stringWidth( change );
    int height = metrics.getHeight();
    g2.drawString( change, w/2-width/2, h/2-height/2 );

> Nota: debido al bug # 4155852, FontSelection podría no funcionar de forma apropiada con todos los nombres de fuentes devueltos por la llamada a getFontFamilyNames. La forma podría no corresponder con cambios en el tamaño o el estilo y el texto podría no mostrarse cuando se selecionan algunos nombres de fuentes. En general, Courier y Helvetica funcionan bien. Mientras tanto, compruebalo periódicamente para ver si se han resuelto estos problemas.

Ozito