Canvas,Checkbox,Listの利用例


★下部のCheckbox(画像1〜3)で,画像を変更できる。開いた画像ファイル名は,上部のラベルに表示される。
★右欄のListから色名を選択し,[背景色変更]ボタンをクリックすれば,Canvasの背景色を変更できる(List項目をダブルクリックしても同じ)
★Canvas内をクリックすれば,その位置のXY座標が表示される。

ソースコード

import java.applet.Applet;
import java.awt.*;

public class ja51 extends Applet
{
  MyCanvas myc;							 //Canvasクラスのオブジェクト
  List colorList = new List(4,false);	 //Listボックスの作成
  Label la =new Label("(選択された画像ファイル名を表示)",Label.CENTER); //ラベルの作成

  public void init(){
	CheckboxGroup checkg = new CheckboxGroup();	//Checkboxをグループ化するオブジェクト
	Panel pa1 = new Panel();			//パネル1の作成
	pa1.setLayout(new GridLayout(1,3));		//パネル1にGridLayoutを設定
	pa1.add(new Checkbox("画像1",checkg,true));	//パネル1に3個のCheckboxを配置
	pa1.add(new Checkbox("画像2",checkg,false));
	pa1.add(new Checkbox("画像3",checkg,false));

	Panel pa2 =new Panel();				//パネル2を作成
	pa2.setLayout(new GridLayout(2,1));		//パネル2にGridLayoutを設定
	colorList.addItem("黄色");			//以下,Listボックスに項目を登録
	colorList.addItem("ピンク色");
	colorList.addItem("緑色");
	colorList.addItem("赤色");
	colorList.addItem("黒色");
	colorList.addItem("薄い灰色");
	colorList.addItem("白色");
	pa2.add(colorList);			//パネル2にListボックスとボタンを配置
	pa2.add(new Button("背景色変更"));

	myc = new MyCanvas(0,this);		//Canvasの作成
	myc.resize(250,200);			//Canvasのサイズと背景色を設定
	myc.setBackground(Color.white);

	setLayout(new BorderLayout());		//AppletにBorderLayoutを設定
	add("North",la);			//以下,各コンポーネントを配置
	add("Center",myc);
	add("South",pa1);
	add("East",pa2);
  }

  public boolean action(Event e,Object o){	//コンポーネントのイベント処理
	if(e.target instanceof Checkbox){		//Checkboxがクリックされた場合
	  String st = ((Checkbox)e.target).getLabel();	//Checkboxのラベルを取得
	  if("画像1".equals(st)){
		myc.chgGA(0);				//MyCanvasクラスのchgGA()メソッドを呼び出す
		la.setText("pho_003.gifが選択されました。");	//ラベル(la)のテキストを変更
	  }else if("画像2".equals(st)){
		myc.chgGA(1);
		la.setText("Sy1.gifが選択されました。");
	  }else if("画像3".equals(st)){
		myc.chgGA(2);
		la.setText("pic01.jpgが選択されました。");
	  }
	}else if(e.target instanceof Button){		//ボタンがクリックされた場合
	  switch(colorList.getSelectedIndex()){		//選択されているListのIndex番号で分岐
	  case 0:
		myc.setBackground(Color.yellow);	//Canvasの背景色を変更する
		break;
	  case 1:
		myc.setBackground(Color.pink);
		break;
	  case 2:
		myc.setBackground(Color.green);
		break;
	  case 3:
		myc.setBackground(Color.red);
		break;
	  case 4:
		myc.setBackground(Color.black);
		break;
	  case 5:
		myc.setBackground(Color.lightGray);
		break;
	  case 6:
		myc.setBackground(Color.white);
		break;
	  }
	  myc.repaint();			//Canvasを再描画することで背景色の変更が反映される
	  return true;
	}else if(e.target instanceof List){		   //List項目がダブルクリックされた場合
	  switch(colorList.getSelectedIndex()){
	  case 0:
		myc.setBackground(Color.yellow);
		break;
	  case 1:
		myc.setBackground(Color.pink);
		break;
	  case 2:
		myc.setBackground(Color.green);
		break;
	  case 3:
		myc.setBackground(Color.red);
		break;
	  case 4:
		myc.setBackground(Color.black);
		break;
	  case 5:
		myc.setBackground(Color.lightGray);
		break;
	  case 6:
		myc.setBackground(Color.white);
		break;
	  }
	  myc.repaint();
	  return true;
	}
	return false;
  }
}

class MyCanvas extends Canvas		//Canvasのサブクラスを定義
{
  Image pic[];				//表示する画像を格納する配列
  int n;				//画像配列の,表示する画像の番号(0〜2)
  int mx,my;				//クリック位置のxy座標を格納する変数

  public MyCanvas(int ns,Applet app){
	pic = new Image[3];
	pic[0] = app.getImage(app.getCodeBase(),"pho_003.gif");
	pic[1] = app.getImage(app.getCodeBase(),"Sy1.gif");
	pic[2] = app.getImage(app.getCodeBase(),"pic01.jpg");

	n =ns;
  }

  public void chgGA(int s){
	n = s;
	repaint();			//paint()メソッドを呼び出す
  }

  public void paint(Graphics g){
	Font f = new Font("TimesRoman",Font.BOLD,16);
	g.setFont(f);						//フォントの設定
	g.drawString("クリック位置の座標は(" + mx + "," + my + ")です",10,20);
	g.drawImage(pic[n],70,30,this);					//画像の表示
  }

  public boolean mouseDown(Event e,int x,int y){
	mx = x;						 //クリック位置のxy座標を格納
	my = y;
	repaint();
	return true;
  }
}
	

末尾