そのままイメージを扱うとレイアウト重なってしまいます
それを防ぐためにイメージをキャンバスという部品に乗せて扱います
以下の例では9個のイメージを読み込み、それを9個のキャンバスに乗せ、
addでグリッドレイアウトに追加しています
キャンバスに乗せる部分は別のクラスとして作っています
// 今回は初めて2つのクラスが存在します
// 以下のクラスはアプレットを継承していて
// ブラウザから呼び出されるクラスです
// これの記述は今までのクラスと同様です
public class test_24 extends Applet
{
// イメージ格納用のテンポラリです
// これはinitの中で定義しても良いです
Image img_tmp;
public void init()
{
int i;
// レイアウトをグリッドレイアウト(3×3)に設定
setLayout(new GridLayout(3,3,0,0));
// 同じ内容を9回繰り返します
for(i=0;i<=8;i++)
{
// イメージをテンポラリに取り込みます
img_tmp = getImage(getDocumentBase(),"gif/test"+i+".gif");
// 読み込んだイメージを部品としてレイアウトに追加します
// イメージを直接は部品として置けないので、MakeCanvクラスを
// 利用して部品として扱えるキャンバスに置き直して使います
add(new MakeCanv(img_tmp));
}
}
}
// ここまで使っていたクラスが全てAppletを継承していたのに対し
// このクラスはキャンバスクラスを継承しています
class MakeCanv extends Canvas
{
Image img;
int size_x,size_y;
// 今回はサイズにどの値を使うかを判定します
boolean flag;
// アプレットではinitが最初に呼ばれたのと違い、それ以外のクラスでは
// クラス名と同じメソッドが最初に呼び出されます
// 今回はMakeCanvと同じ名前の以下のメソッドが最初に呼ばれます
// このようなメソッドのことをコンストラクタと呼びます
// コンストラクタには引数の違う同じ名前のメソッドが存在できます
// どれが呼ばれたかは引数で自動的に判断されます
public MakeCanv(Image pic,int x,int y)
{
// 初期化したい内容を以下に記述します
img = pic;
size_x = x;
size_y = y;
// 引数として渡された値をサイズに使います
flag = true;
}
public MakeCanv(Image pic)
{
// 用意されたキャンバスの大きさをサイズに使います
// この時点でキャンバスの大きさを変数へ代入していないのは
// この時点ではキャンバスの多さが確定していないためです
img = pic;
flag = false;
}
public void paint(Graphics g)
{
// キャンバスに対して実際にイメージを描画しています
if (flag) g.drawImage(img,0,0,size_x,size_y,this);
else g.drawImage(img,0,0,size().width,size().height,this);
}
}
JAVAへ戻る
トップへ戻る