6

有谁知道可以让您在 Java2D 中绘制完全合理的文本的现有代码?

例如,如果我说,drawString("sample text here", x, y, width)是否有一个现有的库可以计算出有多少文本适合宽度,做一些字符间距以使文本看起来不错,并自动进行基本的自动换行?

4

2 回答 2

20

虽然不是最优雅和最健壮的解决方案,但这里有一个方法,它将获取Font当前Graphics对象的 并获取它FontMetrics,以便找出在哪里绘制文本,并在必要时移动到新行:

public void drawString(Graphics g, String s, int x, int y, int width)
{
    // FontMetrics gives us information about the width,
    // height, etc. of the current Graphics object's Font.
    FontMetrics fm = g.getFontMetrics();

    int lineHeight = fm.getHeight();

    int curX = x;
    int curY = y;

    String[] words = s.split(" ");

    for (String word : words)
    {
        // Find out thw width of the word.
        int wordWidth = fm.stringWidth(word + " ");

        // If text exceeds the width, then move to next line.
        if (curX + wordWidth >= x + width)
        {
            curY += lineHeight;
            curX = x;
        }

        g.drawString(word, curX, curY);

        // Move over to the right for next word.
        curX += wordWidth;
    }
}

此实现将通过使用以空格字符作为唯一单词分隔符的方法将给定String的数组分隔,因此它可能不是很健壮。它还假设单词后面跟着一个空格字符,并在移动位置时采取相应的行动。StringsplitcurX

如果我是您,我不建议使用此实现,但可能为了进行另一个实现所需的功能仍将使用FontMetricsclass提供的方法。

于 2008-12-30T16:07:49.143 回答
1

对于自动换行,您可能对如何使用 Graphics 在多行上输出字符串感兴趣。这里没有任何理由,不确定添加是否容易(或不可能!)...

于 2008-12-30T16:25:09.483 回答