当前位置:  开发笔记 > 编程语言 > 正文

使用Java Graphics.drawString替换完全合理化?

如何解决《使用JavaGraphics.drawString替换完全合理化?》经验,为你挑选了1个好方法。

有没有人知道现有代码可以让你在Java2D中绘制完全对齐的文本?

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



1> coobird..:

虽然不是最优雅也不是最强大的解决方案,但这里有一个方法可以获取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

如果我是你,我不建议使用这个实现,但是为了进行另一个实现所需的函数可能仍然使用FontMetrics该类提供的方法.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有