Categorías destacadas
programacion php    
Artículo
20
¡votar!

 Gráficos con Java 2D


Dibujar Múltiples Líneas de Texto

Si tenemos un párrafo de texto con estilo que queremos que quepa dentro de una anchura especifica, podemos usar LineBreakMeasurer, que permite que el texto con estilo se rompa en líneas que caben dentro de un espacio visual. Como hemos aprendido en Mostrar Gráficos con Graphics2D, un objeto TextLayout representa datos de caracteres con estilo, que no se pueden cambiar, pero también permite acceder a la información de distribución. Los métodos getAscent y getDescent de TextLayout devuelven información sobre la fuente usada para posicionar las líneas en el componente. El texto se almacena como un AttributedCharacterIterator para que los atributos de fuente y tamaño de punto puedan ser almacenados con el texto.

. Ejemplo: LineBreakSample

El siguiente applet posiciona un párrafo de texto con estilo dentro de un componente, usando LineBreakMeasurer, TextLayout y AttributedCharacterIterator.

Pulsa sobre la imagen para ejecutar  el applet.

Esta es una imagen del GUI del applet. Para ajecutar el applet, pulsa sobre ella. El applet aparecerá en una nueva ventana del navegador.

El código completo del applet está en LineBreakSample.java .

El siguiente código crea un bucle con la cadena vanGogh. El inicio y final del bucle se recupera y se crea una nueva línea.

AttributedCharacterIterator paragraph = vanGogh.getIterator();
paragraphStart = paragraph.getBeginIndex();
paragraphEnd = paragraph.getEndIndex();
        
lineMeasurer = new LineBreakMeasurer(paragraph,
                            new FontRenderContext(null, false, false));

El tamaño de la ventana se utiliza para determinar dónde se debería romper la línea y se crea un objeto TextLayout por cada línea del párrafo.

Dimension size = getSize();
float formatWidth = (float) size.width;    
float drawPosY = 0;
lineMeasurer.setPosition(paragraphStart);
        
while (lineMeasurer.getPosition() < paragraphEnd) {    
   TextLayout layout = lineMeasurer.nextLayout(formatWidth);

   // Move y-coordinate by the ascent of the layout.
   drawPosY += layout.getAscent();
        
   /* Compute pen x position.  If the paragraph is
      rogth-to-left, we want to align the TextLayouts
      to the right edge of the panel.
    */
   float drawPosX;
   if (layout.isRIGHTToLEFT()) {
       drawPosX = 0;
   }
   else {
     drawPosX = formatWidth - layout.getAdvance();
   }
            
   // Draw the TextLayout at (drawPosX, drawPosY).
   layout.draw(graphics2D, drawPosX, drawPosY);
            
   // Move y-coordinate in preparation for next layout.
   drawPosY += layout.getDescent() + layout.getLeading();
}
Publicado por:
Ricard Lou Torrijos
Recomendar
a un amigo
Compartir
en redes
 
Comentarios
 
BBDD
Entornos de desarrollo
Entretenimiento
Herramientas
Internet
Lenguajes de script
Lenguajes imperativos
Lenguajes orientados a objeto
Otros lenguajes
Plataformas
Teoría
Varios
Copyright © 1998-2011 Programación en Castellano. Todos los derechos reservados
Datos legales | Politica de privacidad | Contacte con nosotros | Publicidad

Diseño web y desarrollo web. Un proyecto de los hermanos Carrero.

Red internet:
Juegos gratis | Servidores dedicados
Más internet: Password | Directorio de weblogs | Favicon