Pregunta

¿Alguien conoce el código existente que le permite dibujar texto completamente justificado en Java2D?

Por ejemplo, si dijera, drawString (" texto de ejemplo aquí " ;, x, y, ancho) , hay una biblioteca existente que podría averiguar qué parte de ese texto cabe dentro de la ancho, haga un espacio entre caracteres para hacer que el texto se vea bien y haga automáticamente el ajuste de palabras básico?

¿Fue útil?

Solución

Aunque no es la solución más elegante ni robusta, aquí hay un método que tomará la Font de la actual Graphics y obtenga su objeto FontMetrics para averiguar dónde dibujar el texto y, si es necesario, pasar a una nueva línea:

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 implementación separará el String en una matriz de String mediante el uso de split con un carácter de espacio como el único separador de palabras , así que probablemente no sea muy robusto. También supone que la palabra va seguida de un carácter de espacio y actúa en consecuencia cuando se mueve la posición curX .

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

Otros consejos

Para el ajuste de palabras, le puede interesar Cómo generar una cadena en varias líneas usando Gráficos . No hay justificación aquí, no estoy seguro si es fácil (o imposible) agregar ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top