| |
作者:家居猫
在编写 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
|
|