我正在编写J2ME中的Java Personal Basis Profile代码。我需要以像素为单位测量AttributedString的宽度。
在Java SE中,我从我的AttributedString获得AttributedCharacterIterator并将其传递给FontMetrics#getStringBounds,但在J2ME PBP中,FontMetrics没有getStringBounds
方法,或任何其他接受CharacterIterator的方法。
我该怎么办?
答案 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 ;
中获得文本宽度(以像素为单位)