测量J2ME中AttributedString的宽度

时间:2012-05-10 09:07:50

标签: java java-me fontmetrics

我正在编写J2ME中的Java Personal Basis Profile代码。我需要以像素为单位测量AttributedString的宽度。

在Java SE中,我从我的AttributedString获得AttributedCharacterIterator并将其传递给FontMetrics#getStringBounds,但在J2ME PBP中,FontMetrics没有getStringBounds方法,或任何其他接受CharacterIterator的方法。

我该怎么办?

2 个答案:

答案 0 :(得分:3)

我真的很努力。我需要将面板的大小调整为AttributedString的宽度。我的解决方案是:

double GetWidthOfAttributedString(Graphics2D graphics2D, AttributedString attributedString) {
    AttributedCharacterIterator characterIterator = attributedString.getIterator();
    FontRenderContext fontRenderContext = graphics2D.getFontRenderContext();
    LineBreakMeasurer lbm = new LineBreakMeasurer(characterIterator, fontRenderContext);
    TextLayout textLayout = lbm.nextLayout(Integer.MAX_VALUE);
    return textLayout.getBounds().getWidth();
}

它使用 LineBreakMeasurer 查找字符串的TextLayout,然后只检查TextLayout的with。 (包装宽度设置为Integer.MAX_VALUE,因此比这更宽的文本将被截断)。

答案 1 :(得分:0)

可以找到文字的宽度(以像素为单位)。

String text = "Hello world";
int widthOfText = fontObject.charsWidth(text.toCharArray(), 0, text.length());

现在,您将在变量 widthOfText ;

中获得文本宽度(以像素为单位)