2008-12-30 11 views
6

¿Alguien conoce el código existente que le permite dibujar texto completamente justificado en Java2D?¿Justificación completa con un reemplazo de Java Graphics.drawString?

Por ejemplo, si dije, drawString("sample text here", x, y, width), ¿hay una biblioteca existente que pueda determinar qué parte de ese texto se ajusta dentro del ancho, haga un espaciado entre caracteres para que el texto se vea bien y haga una palabra básica automáticamente? ¿envase?

Respuesta

17

Aunque no es la solución más elegante o robusta, he aquí un método que va a tomar la Font de la corriente Graphics objeto y obtener su FontMetrics con el fin de averiguar dónde trazar el texto, y si es necesario, pasar a una nueva línea de :

public void drawString(Graphics g, String s, int x, int y, int width) 
{ 
    // FontMetrics gives us information about the width, 
    // height, etc. of the current Graphics object's Font. 
    FontMetrics fm = g.getFontMetrics(); 

    int lineHeight = fm.getHeight(); 

    int curX = x; 
    int curY = y; 

    String[] words = s.split(" "); 

    for (String word : words) 
    { 
     // Find out thw width of the word. 
     int wordWidth = fm.stringWidth(word + " "); 

     // If text exceeds the width, then move to next line. 
     if (curX + wordWidth >= x + width) 
     { 
      curY += lineHeight; 
      curX = x; 
     } 

     g.drawString(word, curX, curY); 

     // Move over to the right for next word. 
     curX += wordWidth; 
    } 
} 

Esta aplicación se separará lo dado String en una matriz de String utilizando el método split con un carácter de espacio como el único separador de palabra, por lo que probablemente no es muy robusta. También asume que la palabra es seguida por un carácter de espacio y actúa en consecuencia al mover la posición curX.

No recomendaría usar esta implementación si fuera usted, pero probablemente las funciones que se necesitan para realizar otra implementación seguirían usando los métodos proporcionados por el FontMetrics class.

+0

Gracias - De hecho, comencé a trabajar en un método similar, y hay una serie de similitudes en nuestro enfoque. También estoy agregando algo de lógica que puede modificar el espaciado entre caracteres. –

+0

Esto es genial. Exactamente lo que necesitaba ahora para terminar un proyecto en ese último minuto. (No es un proyecto serio en producción) – Tone

+0

@Tone Me alegro de poder ayudar :) – coobird

Cuestiones relacionadas