画像の移動

ファイルはzipフォルダに納められています。
解凍ソフト(Aladdin Expander等)を使って解凍して下さい。

背景色の設定

画像の背景色を設定するには、以下のメソッドを使います。

setBackground(カラークラスのオブジェクト);

サイズを扱うクラス

四角い領域のサイズだけを扱うには、Dimensionクラスを使います。
Dimensionクラスは、下の表のフィールドを持ちます。

width
height 高さ

画面の大きさを知る

魚を画面の端で向きを変えて泳がせるには、右端の点を求め、x座標が此以上大きくなる場合には反対向きにすると言う処理が必要です。
つまり、右向きの場合に、

x座標+画像の幅 > 画面の幅

で有る時、反転します。
GUIのプログラムは、マウス操作で画面の大きさを変更出来るので、右端の判定を行うには、最新の画面の大きさを得なければなりません。
画像の大きさはgetSizeメソッドで求められます。
此のメソッドの戻り値はDimensionクラスなので、幅を求めるには、

getSize().width

となります。

画像を扱うクラス(Image)

Javaでは、画像はImageクラスで扱います。
画像ファイルをImageクラスのオブジェクトに変換するには、以下のメソッドを使います。
GUIアプリケーションとアプレットでは使用するメソッドが異なります。

Image img;

ImageIcon icon= new ImageIcon("画像ファイル名");
img = icon.getImage();
FrameクラスをextendsしたGUIアプリケーションで扱われる場合
Image img;

img = getImage(getDocumentBase(),"画像ファイル名");
アプレットで扱われる場合

此のプログラムでは、サイズが等しく向きの異なる1対の画像を用意します。
画像が2枚なので、Imageクラスのオブジェクトも2つ用意しなければなりません。
此処では、Imageクラスのオブジェクト配列を用意し、画像を保存する事にしましょう。
又、其の時の向きを、変数「muki」に以下の様に設定します。

muki = 0 ・・・右向き
muki = 1 ・・・左向き

こうしておくと、「fishImages[muki]」で、適切な画像を選べます。

画像の描画

画像を描画するには、以下のGraphicsクラスのメソッドを使います。

g.drawImage(Imageクラスのオブジェクト, 左上のx座標, 左上のy座標, this);

JPanelのダブルバッファリング

FishThreadFrame.javaを実行した時、画面がチラチラする様な感じがしたと思います。
此は、定期的に再描画が要求される事で、

背景色を塗って描画→全部白く消す→背景色を塗って描画→全部白く消す・・・

が繰り返される為に起こる物です。
SwingのJPanelでは、描画用のバッファを2枚持っています。
再描画が要求されると、2枚目の画面に背景色の塗り潰しを含む完全な画面を作り上げます。
其れから、1枚目の画面を2枚目の画面で差し替えるので、1枚目の画面を白く消していません。
其の為、ちらつきの少ない綺麗なアニメーションが実現出来ます。
尚、背景色もパネルに指定するので、パネルのコンストラクタに、

setBackground(カラークラスのオブジェクト);

を描きます。

ソース ダウンロード
FishThreadFrame.java Thread02.zip
FishThreadSwing.java

戻る