Texto

Cuando necesitemos mostrar texto, podemos usar uno de los componentes orientados a texto, como los componentes Como usar Labels o Usar Componentes de Texto de Swing. Cuando se utiliza un componente de texto, mucho del trabajo lo hacen por nosotros--por ejemplo, los objetos JTextComponent proporcionan soporte interno para chequeo de pulsaciones y para mostrar texto internacional.

Si queremos mostrar una cadena de texto estática, podemos dibujarla directamente a través de Graphics2D usando el método drawString. Para especificar la fuente, podemos usar el método setFont de Graphics2D.

Si queremos implementar nuestras propias rutinas de edición de texto o necesitamos más control sobre la distribucción del texto que la que proporcionan los componentes de texto, podemos usar las clases del paquete java.awt.font.

Fuentes

Las formas que una fuente usa para representar los caracteres de una cadena son llamadas glyphs. Un caracter particular o una combinación de caracteres podría ser representada como uno o más glyphs. Por ejemplo, á podría ser representado por dos glyphs, mientras que la ligadura fi podría ser representada por un sólo glyph.

Se puede pensar en una fuente como en una colección de glyphs. Una sola fuente podría tener muchas caras, como una pesada, média, oblíqua, gótica y regular, Todas las caras de una fuente tienen características tipográficas similares y pueden ser reconocidad como miembros de la misma familia. En otras palabras, una colección de glyphs con un estilo particular forma una cara de fuente; y una colección de caras de fuentes formas una familia de fuentes; y el conjunto de familias de fuentes forman el juego de fuentes disponibles en el sistema.

Cuando se utiliza el API 2D de Java, se especifican las fuentes usando un ejemplar de Font. Podemos determinar las fuentes disponibles en el sistema llamando al método estático GraphicsEnvironment.getLocalGraphicsEnvironment y preguntando al GraphicsEnvironment devuelto. El método getAllFonts devuelve un array que contiene ejemplares Font para todas las fuentes disponibles en el sistema; getAvailableFontFamilyNames devuelve una lista de las familias de fuentes disponibles.

GraphicsEnvironment también describe la colección de dispositivos de dibujo de la plataforma, como pantallas e impresoras, que un programa Java puede utilizar. Esta información es usada cuando el sistema realiza la conversión del espacio de usuario al espacio de dispositivo durante el dibujo.


Nota:  En el JDK 1.1, las fuentes se describían con nombres lógicos que eran mapeados en diferentes caras de fuentes, dependiendo de las fuentes que estaban disponibles en una plataforma particular. Por razones de compatibilidad, Graphics2D también soporta la especificación de fuentes por el nombre lógico. Para obtener una lista de los nombres lógicos de la fuentes, se puede llamar a java.awt.Toolkit.getFontList.

Distribución de Texto

Antes de poder mostrar el texto, debe ser distribuido para que los caracteres sean representados por los glyphs apropiados en las posiciones apropiadas. Si estamos usando Swing, podemos dejar que JLabel o JTextComponent manejen la distribución de texto por nosotros. JTextComponent soporta texto bidireccional y está diseñada para manejar las necesidades de la mayoría de las aplicaciones intenacionales. Para más información sobre el uso de los componentes de texto Swing, puedes ver Usar Componentes de Texto.

Si no estamos usando un componente de texto Swing para mostrar el texto automáticamente, podemos usar uno de los mecanismos de Java 2D para manejar la distribución de texto.

  • Si queremos implementar nuestras propias rutinas de edición de texto, podemos usar la clase TextLayout para manejar la distribución de texto, iluminación y detección de pulsación. Las facilidades proporcionadas por TextLayout manejan muchos casos comunes, incluiyendo cadenas con fuentes mezcladas, lenguajes mezclados y texto bidireccinal. Para más información sobre TextLayout, puedes ver Manejar la disttribución de Texto.
  • Si queremos un control total sobre la forma y posición de nuestro texto, podemos construir nuestro propio objeto GlyphVector usando Font y renderizando cada GlyphVector a través de Graphics2D. Para más información sobre la implementación de nuestro propio mecanismo de distribución de texto, puedes ver Implementar un Mecanismo Personalizado de Distribución de Texto

Ozito