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