プロが教える店舗&オフィスのセキュリティ対策術

Graphics.drawString()を使用して文字を描画するときに
その文字間隔を設定したいと思っていますが、方法はございますでしょうか?

FontMetrics等を確認しましたが、文字間隔を設定する
ようなメソッドはありませんでした。

試しに、一文字ずつFontMetrics.getWidths(hogehoge)で文字幅を取得して、描画してみましたが、getWidthsの結果が正しく戻ってこない場合もあり、且つ設定できる文字間隔がInt型となることから当方の希望する精度での
文字間隔の設定はできませんでした。

どなたか、ご存じの方はいらっしゃいますでしょうか?

A 回答 (1件)

 こんばんは。



 スマートなやり方なのかどうかわからないのですが、一文字づつdrawStringしていくのはどうでしょう?

 たとえば、こんな↓メソッドを用意して、paintメソッドやpaintComponentメソッドから呼んだらどうでしょう?

public static void drawIntervalString(Graphics g, String string, int x, int y, int interval) {
  if (interval > 0) {
    FontMetrics metrics = g.getFontMetrics();
    for (int i = 0; i < string.length(); i++) {
      char moji = string.charAt(i);
      g.drawString(Character.toString(moji), x, y);
      x = x + metrics.charWidth(moji) + interval;
    }
  }
  else {
    g.drawString(string, x, y);
  }
}

 また、より細かくしたい場合は、Graphics2Dを使うようにこういう風に↓することもできると思います。

public static void drawIntervalString(Graphics2D g, String string, float x, float y, float interval) {
  if (interval > 0) {
    FontMetrics metrics = g.getFontMetrics();
    for (int i = 0; i < string.length(); i++) {
      char moji = string.charAt(i);
      g.drawString(Character.toString(moji), x, y);
      x = x + metrics.charWidth(moji) + interval;
    }
  }
  else {
    g.drawString(string, x, y);
  }
}
    • good
    • 1
この回答へのお礼

Graphics2Dのdrawstringを見落としていたみたです。
float型での描画のメソッドが準備してあったのですね。

サンプルソースまでつけていただいて、本当にありがとうございます。

無事、目的の精度で描画することができました。

お礼日時:2006/06/06 12:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています