6

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

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

我该怎么办?

4

2 回答 2

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 的与。(环绕宽度设置为 Integer.MAX_VALUE,因此比该宽度更宽的文本将被截断)。

于 2014-01-25T23:07:22.183 回答
-1

可以找到以像素为单位的文本宽度

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

现在,您将在变量widthOfText中获得以像素为单位的文本宽度;

于 2012-08-08T06:54:20.007 回答