[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); }
これらはクリッピングには対応していません。また複数行にも対応していません。