drawStringメソッド

広告

Graphics2Dクラスのオブジェクトを使って文字列を描画するにはGraphics2Dクラスで用意されている「drawString」メソッドを使います。

Graphics2D コンテキストの現在のテキスト属性状態を使うことにより、指定さ
れた String のテキストを描画します。最初の文字のベースラインは、ユーザー
空間の (x, y) に位置します。適用される描画属性には、Clip、Transform、
Paint、Font、および Composite の各属性があります。ヘブライ語やアラビア
語などの筆記システムの文字では、グリフは右から左に描画されます。この場
合には、指定された座標はベースラインの左端の文字位置にあります。

パラメータ:
  str - 描画される文字列
  x - String が描画される 位置の x 座標
  y - String が描画される 位置の y 座標 
例外: 
  NullPointerException - str が null の場合

1番目の引数に描画したい文字列を表すString型の値を指定します。また2番目と3番目の引数に文字列を描画する位置をint型の値で指定します。

注意して頂きたいのは文字列を描画する位置として指定した座標は文字列のベースラインの位置であることです。文字列が描画される左上の座標では無い点に注意して下さい。

具体的には次のように記述します。

public void paintComponent(Graphics g){
  Graphics2D g2 = (Graphics2D)g;

  g2.drawString("Hello Java2D", 100, 100);
}

また文字列を描画する時にもアンチエイリアス処理を行うことは可能です。設定方法については『文字描画に対するアンチエイリアス処理』を参照して下さい。

具体的には次のように記述します。

public void paintComponent(Graphics g){
  Graphics2D g2 = (Graphics2D)g;

  g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
                      RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
                        
  g2.drawString("Hello Java2D", 100, 100);
}

サンプルプログラム

簡単なサンプルを一度試してみます。

StringTest1.java

import javax.swing.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.*;

public class StringTest1 extends JPanel{

  public static void main(String[] args){
    JFrame frame = new JFrame();

    StringTest1 app = new StringTest1();
    frame.getContentPane().add(app);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 300, 200);
    frame.setTitle("タイトル");
    frame.setVisible(true);
  }

  public void paintComponent(Graphics g){
    Graphics2D g2 = (Graphics2D)g;

    g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
                        RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

    g2.drawString("Hello Java2D", 100, 100);

//    g2.draw(new Line2D.Double(100.0d, 100.0d, 200.0d, 100.0d));
  }
}

上記をコンパイルした後で実行すると次のように表示されます。

文字列を描画する

サンプルプログラム内でコメントされている部分を外して実行して頂くと文字列を描画する位置に指定した座標に直線を描画します。

文字列を描画する

このように文字列を描画する位置として指定した座標は文字列のベースラインとして使われていることが確認できます。

( Written by Tatsuo Ikura )