如何使用 TextLayout 在文本测量中包含尾随空格?

问题描述 投票:0回答:1

我正在使用

java.awt.font.TextLayout
类来测量文本字符串的边界。在此测量中,我需要包含任何尾随空格。然而,默认情况下,TextLayout 在计算文本边界时似乎会忽略任何尾随空格。这是一个例子:

import java.awt.geom.*;
import java.awt.font.*;
import java.text.*;

public class scratch
{
    public static double measureTextWidth(String text)
    {
        AttributedString astring = new AttributedString(text);
        AffineTransform at = new AffineTransform();
        FontRenderContext frc = new FontRenderContext(at, true, true);
        TextLayout layout = new TextLayout(astring.getIterator(), frc);
        return layout.getBounds().getWidth();
    }

    public static void main(String args[])
    {
        System.out.println(measureTextWidth("sometext"));
        System.out.println(measureTextWidth("sometext    "));
    }
}

此代码为两个字符串返回相同的宽度,忽略第二个字符串的尾随空格。

有没有办法让 TextLayout 在计算提供的文本字符串的宽度时考虑尾随空格?

java awt java-2d
1个回答
0
投票

layout.getBounds()
返回实际内容周围的边界框,因此它不仅不包括尾随空白,也不包括前导空白,甚至不包括第一个和最后一个非字符图形中的空白。空格字符,至少只要您忽略框的
x
值即可。

更糟糕的是,它的文档说:

由于光栅化效果,此边界可能不会包含 TextLayout 渲染的所有像素。

您最可能想要的是获得 TextLayout提前

,因此将 
layout.getBounds().getWidth()
替换为
layout.getAdvance()

© www.soinside.com 2019 - 2024. All rights reserved.