Voll Rechtfertigung mit einem Java Graphics.DrawString Ersatz?
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 ?
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 ...