Я отрисовываю текст с помощью пользовательского средства визуализации ячеек таблицы и хочу обрезать нарисованный текст, если он будет превышать текущую ширину ячейки, переключаясь на представление «Этот текст слишком длинный ...», где три точки в конце никогда не покидает ограничивающую рамку. Мой текущий алгоритм следующий:
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);
}
Есть ли лучший способ определить, сколько символов мне нужно drawString()
, прежде чем переключаться на символ ... (u2026)?