学生向けプログラミング入門

学生向けにプログラミングを解説。Java、C++、Ruby、PHP、データベース

Javaプログラミング入門その26 イメージと文字列を描画するプログラム

<<前  [TOP]  次>>


AWTでより凝ったグラフィックス描画をする場合、すでにファイルとなっている画像イメージを利用した方が手軽です。
AWTの標準で扱えるイメージのフォーマットは、JPEG、GIF、PNGです。


イメージの生成方法は、実行されるウィンドウシステムによって異なりますので、どのシステムで実行されるかを取得してから、イメージを生成します。
取得の方法は以下の通りです。

Toolkit tk = Toolkit.getDefaultToolkit();    //実行されているシステムを取得
Image image = tk.getImage("mypaint.png");  //イメージの取得



まずは以下のサンプルプログラムを作成して下さい。


AwtDrawTest2.java 直

import java.awt.*;

public class AwtDrawTest2 extends Canvas {

	private final int MAX_IMAGE = 7;
	private final int WIDTH = 500;
	private final int HIGHT = 400;
	private Image[] image = new Image[MAX_IMAGE];
	private MediaTracker tracker;

	public AwtDrawTest2() {

		setSize(WIDTH, HIGHT);
		setBackground(Color.black);

		Toolkit tk = Toolkit.getDefaultToolkit();

		tracker = new MediaTracker(this);

		for(int i=0; i<MAX_IMAGE; i++) {

			image[i] = tk.getImage("char" + i + ".gif");
			tracker.addImage(image[i], i);
		}

		try {

			tracker.waitForAll();
			
		}

		catch (InterruptedException e) {

			System.err.println("tracker error");
		}
	}

	public void paint(Graphics g) {

		for (int i=0; i<MAX_IMAGE; i++) {

			g.drawImage(image[i], i*50+50, 100, this);
		}

		g.setColor(Color.yellow);

		Font font = new Font("Serif", Font.ITALIC, 48);	//フォント情報を追加
		g.setFont(font);

		g.drawString("サンプル画像の表示", 10, 200);
	}

	public static void main(String[] args) {

		AwtDrawTest2 canvas = new AwtDrawTest2();
		Frame frame = new Frame("AwtDrawTest2");
		frame.add(canvas);
		frame.pack();
		frame.setVisible(true);
	}
}



このプログラムを実行するには画像ファイルが必要です。
char0.gif〜char6.gifをプログラムを保存するのと同じフォルダ(ディレクトリ)に保存してください。
char0.gif 直
char1.gif 直
char2.gif 直
char3.gif 直
char4.gif 直
char5.gif 直
char6.gif 直


イメージの描画は、GraphicsクラスのdrawImage()メソッドを使用します。
グラフィックスコンテキスト(paintメソッド)に描くことで実現できます。

public void paint( Graphics g ) {
    g.drawImage(image, 100, 100, this);    //イメージを表示
}

drawImage()メソッドの引数は、「イメージ、表示する左上点のx座標、y座標、イメージ表示に関する情報を通知する先のオブジェクト」です。


イメージや音声の状態を監視するのがメディアトラッカーです。
メディアトラッカーを使用することで、全イメージが揃ってからプログラムを開始させるなどといったことが可能になります。

MediaTracker tracker = new MediaTracker(this)    //イメージデータ通知用
tracker.addImage(image, 1);    //imageを登録して、通知用のIDを割り当てる
try {                  //全イメージのダウンロードが終わるまで待つ
    tracker.waitForAl();
 }
 catch (InterruptedException e) {     //エラーがあった場合の処理
     System.err.println("tracker error");
 }



文字列もイメージと同様にグラフィックスコンテキストに描くことで実現できます。
GraphicsクラスのdrawString()メソッドを使用します。
これでdrawString()以前に設定された色やフォントでの文字列表示が行われます。

public void paint(Graphics g) {
    g.drawString("この文字列が表示されます", 100, 100);    //文字列の描画
}

drawString()メソッドの引数は、「表示文字列, 左端の文字のベースラインを基準としてx座標, y座標」です。


フォントの指定は一般的に論理フォントと呼ばれる呼び方で指定します。
以下の5種類はどのようなプラットフォームにも存在することが約束されています。

名前意味
Serif明朝系
SansSerifゴシック系
Monospaced等幅
Dialogダイアログ(対話)用
DialogInput入力用


さらに、これらのフォントに対して文字装飾を行うことが可能です。
名前意味
PLAIN通常
BOLD強調
ITALIC斜体


フォントの設定は以上の情報とフォントサイズを指定することで行います。
また、フォントはコンポーネントあるいはグラフィックスコンテキストに設定することが出来ます。

//グラフィックスコンテキストへの設定
public void paint(Graphics g) {
    Font font = new Font("Serif", Font.ITALIC, 48);
    g.setFont(font);
    g.drawString("この文字列が表示されます", 100, 100);    //文字列の描画
}

//コンポーネントへの設定
Canvas canvas = new Canvas();
 Font font = new Font("Serif", Font.ITALIC, 48);
 canvas.setFont(font);


public class AwtDrawTest2 extends Canvas {

extends Canvasで、Canvasクラスのフィールド、メソッドをすべて継承しています。
これにより、コンストラクタ内ですべてを記述することなく、Canvasの機能を使うことが出来ます。
必要な部分のみ記述することで、その部分のみを書き換えることが出来ます。


プログラムを実行してみてください。
大きさ(500,400)のフレームが表示され、中にキャンバスが表示されています。
キャンバスにはcahr0.gif〜char6.gifの画像が指定された位置に表示されています。
その下に指定したフォントで「サンプル画像の表示」と表示されます。
フレームの終了ボタンは使えませんので、Ctrlキー+Cキーで強制終了してください。








<<前  [TOP]  次>>