Texto en Java 2D
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 pesada, média, oblíqua, gótica y regular, Todas las caras de
una fuente tienen características tipográficas similares y pueden ser reconocidas 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 forman 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 internacionales. 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, incluyendo 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