服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

在图形编程中用textlayout精确绘制字符串


  作者:家居猫

在编写 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

扫描关注微信公众号