java - 在 J2ME 中测量 AttributedString 的宽度

标签 java java-me fontmetrics

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

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

我该怎么办?

最佳答案

我为此非常努力。我需要将面板的大小调整为 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,因此宽度大于该值的文本将被截断)。

关于java - 在 J2ME 中测量 AttributedString 的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10530795/

相关文章:

java - 如何使文本字体缩小并匹配 JTextArea 高度?

java - 如何解决此错误 : Caused by: java. lang.InknownClassChangeError: null

java - 将图像从 J2ME 客户端上传到 Servlet

c++ - 我如何在 Symbian 上检索 SMS 收件箱消息,最好使用 j2me?

java - 在调用paint方法之前获取字体规范

java - 如果文本中有阿拉伯语或波斯语字母,通过 fontmetrics 计算的字符串宽度非常慢

java - 我无法使用 zxing 读取翻转垂直二维码

java - 如何在struts中将ID传递给action.java?

java - 无法使用 Gradle 通过 BinTray 将 Java 项目发布到 Maven

java - J2ME (Java) - 在显示类中捕获空指针异常