WEB开发网
开发学院WEB开发Jsp 在图形编程中用TextLayout精确绘制字符串 阅读

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

 2008-01-05 08:34:41 来源:WEB开发网   
核心提示:作者:家居猫在编写 java 图形程序时,大家通常是用 java.awt.Graphics.drawString( int x, int y ) 来画字符串,在图形编程中用TextLayout精确绘制字符串,但是其效果往往不能满足我们的要求,其实,"j"多占了下面的一部分,TextLayout tm

  作者:家居猫

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

Tags:图形 编程 中用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接