Ich render Text mit einem benutzerdefinierten Tabellenzellen-Renderer und ich möchte den gezeichneten Text trimmen, wenn es die aktuelle Zellenbreite überschreiten würde, um zu "Dieser Text ist zu lang ... "eine Art Darstellung, bei der die drei Punkte am Ende nie die Bounding Box verlassen. Mein aktueller Algorithmus ist folgende:Wie man Text in eine Box rendert und überschüssiges durch drei Punkte ersetzt
FontMetrics fm0 = g2.getFontMetrics();
int h = fm0.getHeight();
int ellw = fm0.stringWidth("\u2026");
int titleWidth = fm0.stringWidth(se.title);
if (titleWidth > getWidth()) {
for (int i = se.title.length() - 1; i > 0; i--) {
String tstr = se.title.substring(0, i);
int tstrw = fm0.stringWidth(tstr);
if (tstrw + ellw < getWidth()) {
g2.drawString(tstr, 2, h);
g2.drawString("\u2026", 2 + tstrw, h);
break;
}
}
} else {
g2.drawString(se.title, 2, h);
}
Gibt es eine bessere Art und Weise zu bestimmen, wie viele Zeichen sollte ich drawString()
bevor sie an den ... (u2026) Zeichen zu wechseln?
Danke. Der Grund dafür ist, dass die erste Zeile (ein Titel) in 16pt-Text gezeichnet wird und die zweite und dritte Zeile (einige Details) als normaler Text innerhalb der Zelle gezeichnet werden. Der LeftDotRenderer unterscheidet sich hauptsächlich dadurch, dass er statt der gesamten Stringbreite die Größe pro Zeichen zählt. Ich werde es testen. – akarnokd