我使用自定義表格單元格渲染器渲染文本,如果要超過當前單元格寬度,我想修剪繪製的文本,切換到「此文本是長......「類型的表示,最後的三個點永遠不會離開邊界框。我現在的算法如下:如何將文本渲染爲一個框並用三個點替換多餘
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)字符前?
謝謝。原因是第一行(一個標題)以16pt文本繪製,第二行和第三行(一些細節)在單元格內繪製爲普通文本。 LeftDotRenderer的不同之處主要在於它計算每個字符的大小而不是整個字符串寬度。我會測試它。 – akarnokd 2009-08-01 14:55:50