我呈现文本有一个定制的表格呈示和我想修剪的文字绘制的,如果将超过目前的小区的宽度,换来的"这一案文是漫长..."种表示,那里的三点结束时从来没有离开边界框。我目前算法如下:

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);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top