戻る 03. 一枚絵の表示 次へ

やはり四角形や線を引いても面白くないです
どうせならバーンと絵を描きましょう。

今回はPNG画像の読み込み・表示です


この例では120*160の解像度を使っていますが
現在販売されているJ-PHONEの端末では120*130までしか表示できません。

/*=============================================================================
	sample3	一枚絵の表示
-----------------------------------------------------------------------------*/
import	javax.microedition.midlet.*;
import	javax.microedition.lcdui.*;
/*=============================================================================
	メインクラス
-----------------------------------------------------------------------------*/
public class sample3 extends MIDlet
{
	/*========== アプリの開始 ==========*/
	public void startApp() {
		sample3Canvas canvas=new sample3Canvas();
		Display.getDisplay(this).setCurrent(canvas);
		//スレッド
		Thread thread=new Thread(canvas);
		thread.start();
	}
	/*========== アプリの一時停止 ==========*/
	public void pauseApp() {
	}
	/*========== アプリの終了 ==========*/
	public void destroyApp(boolean unconditional) {
	}
}
/*=============================================================================
	キャンバスクラス									
-----------------------------------------------------------------------------*/
final class sample3Canvas extends Canvas
    implements Runnable
{
	private static Image	Bg	=null;

	sample3Canvas()//コンストラクタ
	{
		try{
			Bg	=	Image.createImage("/sample.png");
		}
		catch(Exception e){
			System.out.println("ファイル読めてない");
			System.err.println(e.toString());
		}
	}
	public void run() {
		while (true) {
			repaint();
			try {
                		Thread.sleep(100);
			}catch (Exception e) {
			}
		}
	}
	public void paint(Graphics g)
	{
		/*読み込んだ絵を表示*/
		g.drawImage	(Bg,0,0,0);

		/*ついでに枠付き文字描画*/
		g.setColor	(0,0,0);
		g.drawString	("Sample 3",getWidth()/2+1,40,g.HCENTER|g.VCENTER);
		g.drawString	("Sample 3",getWidth()/2-1,40,g.HCENTER|g.VCENTER);
		g.drawString	("Sample 3",getWidth()/2,40+1,g.HCENTER|g.VCENTER);
		g.drawString	("Sample 3",getWidth()/2,40-1,g.HCENTER|g.VCENTER);
		g.setColor	(255,255,255);
		g.drawString	("Sample 3",getWidth()/2,40,g.HCENTER|g.VCENTER);
	}
}
コンストラクタが出てきました。
読み込んでから描画に移るのでコンストラクタで先に画像を読み込みます。
補足しておきますがコンストラクタとはクラスの最初に呼ばれる関数です。

Image型の変数を宣言してcreateImageで読み込みます。
注意点としてはリソースとして組み込まなければいけないことです。
outputフォルダに画像ファイルをおいとかなければ読めません。
outputフォルダに置かれているファイルはりソースとしてjarファイルに結合されます。

ついでにtry〜catchの説明もしておきます。
try内に書かれている命令が失敗するとcatchに処理が移ります。
catchの引数Exception型となっていますが
これは他にも色々と種類があります。
これで失敗時の受けるエラー種類を指定できます。
今回の例では画像の読み取り失敗時にエラーを出しています。