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

私があなただったら、この実装を使用することはお勧めしませんが、おそらく、別の実装を作成するために必要な関数は、FontMetricsクラスによって提供されるメソッドを引き続き使用するでしょう。

于 2008-12-30T16:07:49.143 に答える
1

ワードラップについては、グラフィックスを使用して複数行に文字列を出力する方法に興味があるかもしれません。ここに正当化はありません。追加するのが簡単(または不可能!)かどうかはわかりません...

于 2008-12-30T16:25:09.483 に答える