题
我呈现文本有一个定制的表格呈示和我想修剪的文字绘制的,如果将超过目前的小区的宽度,换来的"这一案文是漫长..."种表示,那里的三点结束时从来没有离开边界框。我目前算法如下:
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)的角色?
解决方案
这是表的默认渲染器的默认行为,所以我不确定我理解这样做的原因。
但是我在左边创建了一个点的渲染器(“...文字太长了”),它显示了一个更完整的方法来做你想要的,因为它考虑了渲染器上可能的边框和渲染器的单元间距。查看 LeftDotRenderer 。
其他提示
我不能想到的另一种方式来实现所期望的效果,但是你应该能够替换第2绳()呼吁之一。它已经有一段时间,因为我已经写入Java但我认为下面的应工作。
顺便说一句,我改变姓名,因此我可以读的编码。:p
FontMetrics metrics = g2.getFontMetrics();
int fontHeight = metrics.getHeight();
int titleWidth = metrics.stringWidth(se.title);
if (titleWidth > getWidth()) {
String titleString;
for (int i = se.title.length() - 1; i > 0; i --) {
titleString = se.title.substring(0, i) + "\u2026";
titleWidth = metrics.stringWidth(titleString);
if (titleWidth < getWidth()) {
g2.drawString(titleString, 2, fontHeight);
break;
}
}
} else {
g2.drawString(se.title, 2, fontHeight);
}
不隶属于 StackOverflow