Frage

Kennt jemand bestehenden Code, den Sie voll und ganz gerechtfertigt Text in Java2D lässt ziehen?

Zum Beispiel, wenn ich sagte, drawString("sample text here", x, y, width), gibt es eine bestehende Bibliothek, die herausfinden konnte, wie viel von diesem Text innerhalb der Breite paßt, einige den Zwischenzeichenabstand den Text gut aussehen zu lassen, und tut automatisch grundlegenden Zeilenumbruch ?

War es hilfreich?

Lösung

Obwohl es nicht die eleganteste noch robustere Lösung, hier ist eine Methode, die die Font der aktuellen Graphics Objekt und erhalten ihre FontMetrics , um herauszufinden, wo Sie den Text ziehen und, wenn nötig, in eine neue Zeile verschieben:

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;
    }
}

Diese Implementierung wird die gegebene String in ein Array von String trennen, indem Sie die split Methode mit einem Leerzeichen als nur Worttrenn, so ist es wahrscheinlich nicht sehr robust. Es geht auch davon aus, dass das Wort durch ein Leerzeichen gefolgt wird und wirkt dementsprechend, wenn die curX Position bewegt wird.

Ich würde nicht empfehlen, diese Umsetzung zu verwenden, wenn ich Sie wäre, aber wahrscheinlich die Funktionen, die notwendig sind, um würde eine weitere Implementierung zu machen noch die Methoden der FontMetrics Klasse .

Andere Tipps

Für den Zeilenumbruch, könnte man von Wie ein String auf mehreren Zeilen Ausgabe mit Grafiken . Keine Rechtfertigung hier, nicht sicher, ob es leicht ist (oder nicht!) Hinzufügen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top