[Java][AWT]テキストを矩形内に表示する

まず、テキストの描画に必要な矩形のサイズを求めます。

    public static Rectangle2D.Float getTextRectangle(Graphics2D g2, String text, Font font) {
        assert g2 != null: g2;
        assert text != null && text.length() > 0: text;
        FontRenderContext frc = g2.getFontRenderContext();
        TextLayout tl = new TextLayout(text, font, frc);
        return new Rectangle2D.Float(0, -tl.getAscent(), 
                tl.getAdvance(), tl.getAscent()+tl.getDescent());
    }

それを使って、指定した矩形内に右寄せとか中央に表示させます。

    public static void drawText(Graphics2D g2, Rectangle rect, String text, Font font, float alignmentX, float alignmentY) {
        assert text != null: text;
        assert 0.0f <= alignmentX && alignmentX <= 1.0f: alignmentX;
        assert 0.0f <= alignmentY && alignmentY <= 1.0f: alignmentY;
        if (text.length() == 0) return;
        Rectangle2D.Float textrect = getTextRectangle(g2, text, font);
        float x = rect.x + (rect.width - textrect.width) * alignmentX;
        float y = rect.y + (rect.height - textrect.height) * alignmentY;
        g2.drawString(text, x, y - textrect.y);
    }

これらはクリッピングには対応していません。また複数行にも対応していません。