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

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

作者:家居猫

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航