Je rends le texte avec un rendu de cellule de tableau personnalisé et je veux couper le texte dessiné si elle dépasse la largeur de la cellule actuelle, en passant à un "Ce texte est à long ... "genre de représentation, où les trois points à la fin ne quitte jamais la boîte de délimitation. Mon algorithme actuel est le suivant:Comment rendre le texte dans une boîte et remplacer l'excédent avec trois points
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);
}
Y at-il une meilleure façon de déterminer combien de caractères dois-je drawString()
avant de passer au caractère ... (u2026)?
Merci. La raison en est que la première ligne (un titre) est dessinée en texte de 16pt et les deuxième et troisième lignes (certains détails) sont dessinées en tant que texte normal dans la cellule. Le LeftDotRenderer diffère principalement en ce qu'il compte la taille par caractère avec au lieu de la largeur de chaîne entière. Je vais le tester. – akarnokd