作者:家居猫
在编写 java 图形程序时,大家通常是用 java.awt.graphics.drawstring( int x, int y ) 来画字符串。但是其效果往往不能满足我们的要求。
其实,java2d提供了更先进的绘制字符串的方法,用 textlayout 可以绘制出相当令人满意的效果。下面是一个例子供大家参考:
//设置字体
font mfont = new font( font, style, (int)size );
//保存当前的着色参数
renderinghints rhs = g.getrenderinghints();
//在 linux 画中文字符时,打开抗锯齿功能可能会影响显示效果。
//所以这里将抗锯齿功能关掉。你也可以经过测试来决定是否关闭此功能。
g.setrenderinghint(renderinghints.key_antialiasing, renderinghints.value_antialias_off);
//下面这段代码测试字符串可能显示的宽度。如果宽度大于 limitwidth,则用 ... 代替多余的部分。
if (limitwidth != -1) {
attributedstring as = new attributedstring(buf);
as.addattribute( textattribute.font, mfont );
textmeasurer tm = new textmeasurer(as.getiterator(), g.getfontrendercontext());
int limitindex = tm.getlinebreakindex(0, limitwidth);
if (buf.length() > limitindex) {
buf = buf.substring(0, limitindex) + "...";
}
}
//构造 textlayout
textlayout tl = new textlayout(buf, mfont, g.getfontrendercontext());
//构造下面这个 textlayout 主要是为了得到英文字符串的全高度。
//因为 "abc" 与 "obj" 所占的高度是不一样的,"j"多占了下面的一部分。
textlayout tmptl = new textlayout("ig", mfont, g.getfontrendercontext());
rectangle2d tmprt = tmptl.getbounds();
//恢复旧的着色参数
g.setrenderinghints(rhs);
//画字符串,注意这里的 x, y 坐标是 textlayout 所占矩形框的左上角坐标。
tl.draw(g, x, (float)(y + tmprt.getheight()));
--摘自 http://www.javaidea.net
闽公网安备 35060202000074号