// 点のクラスを定義する.
class Point{
// X座標,Y座標を int で保持する.
public int x,y;
// Pointのコンストラクタ
public Point(int x1,int x2){
x=x1;
y=x2;
}
}
Appletを使うため、Vectorクラスを使うため、
AWTを使うため、イベント駆動関係のクラスを用いるため、
まずは様々な機能をimportします。
その後、Pointクラスを定義します。
これはマウスがクリックされた場所を表示するために使います。
// インタフェースの実装では 「implements インタフェース名」と書く
// 複数書く場合は,カンマで区切る
public class Kadai1209 extends Applet implements ActionListener,ItemListener{
// ベクトルの作成
Vector vector = new Vector();
// マウスをクリックした回数を示す int型の変数draggingの宣言
int click;
// 背景の色を決める int型の変数backの宣言
int back;
// イメージを表す Image クラスの変数 image の宣言
Image image1,image2;
// ボタンを作る
Button button1,button2;
// チェックボックスを作る
Checkbox check1;
次にKadai1209クラスを作成します。
まず初めに、様々な変数を宣言します
public void init(){
setLayout(new FlowLayout());
// 「Change」というラベルを持つボタンを作り、window中に配置
add(button2=new Button("Change"));
// 「Check1」というラベルを持つチェックボックスを作り,window中に配置
add(check1=new Checkbox("Check1"));
// クリックされていない
click=0;
// 背景色の初期化
back = 0;
// イメージを得る.
image1=Toolkit.getDefaultToolkit().getImage("test.png");
image2=Toolkit.getDefaultToolkit().getImage("test2.png");
// GUI部品と,Event Listenerを関連づける
button2.addActionListener(this);
check1.addItemListener(this);
}
Appletなのでinitメソッドを定義します。
// Frameの書き直しをする際に呼ばれる
public void paint(Graphics g){
// デバッグ用の表示
System.out.println(click);
// マウスをクリックした回数で分類して
if(click % 3 == 1){
// 青い色で
if (back % 2 == 0){
g.setColor(Color.blue);
}
if (back % 2 == 1){
g.setColor(Color.red);
}
g.fillRect(0,0,400,400);
// イメージ image2 を (100,100)を左上にして表示する.
g.drawImage(image2,100,100,this);
}
else if(click % 3 == 2){
if (back % 2 == 0){
// 白い色で
g.setColor(Color.white);
}
else if(back % 2 == 1){
// 青い色で
g.setColor(Color.blue);
}
g.fillRect(0,0,400,400);
// イメージ image を (100,100)を左上にして表示する.
g.drawImage(image1,100,100,this);
}
else if(click % 3 == 0){
// 雪だるま
if (back % 2 == 0){
//色を黒に変更
g.setColor(Color.black);
}
else if (back % 2 == 1){
//色を青に変更
g.setColor(Color.blue);
}
//全部黒で塗りつぶす
g.fillRect(0,0,400,400);
//色を灰色に変更
g.setColor(Color.gray);
//下半分を塗りつぶす
g.fillRect(0,150,400,400);
//色を白に変更
g.setColor(Color.white);
//雪だるまの頭を書く
g.fillOval(265,140,70,70);
//雪だるまの胴体を書く
g.fillOval(250,200,100,100);
//色を赤に変更
g.setColor(Color.red);
//雪だるまの口を書く
g.fillArc(240,160,50,50,350,20);
//色を緑に変更
g.setColor(Color.green);
//雪だるまの左側の目を書く
g.fillOval(285,160,10,10);
//雪だるまの右側の目を書く
g.fillOval(305,170,10,10);
//色を黄色に変更
g.setColor(Color.yellow);
//月を書く
g.fillOval(100,100,30,30);
if (back % 2 == 0){
//色を黒に変更
g.setColor(Color.black);
}
else if (back % 2 == 1){
//色を青に変更
g.setColor(Color.blue);
}
//月を三日月にする
g.fillOval(112,105,20,20);
}
}
3種類のペイントメソッドを定義します。
click % 3 == 1,2 の場合は、
下の2種類の絵が表示されます。
背景は、backの値によって色が変わります。
public void actionPerformed(ActionEvent e){
// イベントのターゲットは GUI 部品のオブジェクトだが,
// これが Button クラスのインスタンスかどうかのチェック
System.out.println(e);
Object source=e.getSource();
if(source instanceof Button){
String label=e.getActionCommand();
// 押されたボタンのラベルをチェック
if(label.equals("Change")){
click += 1;
}
// 明示的に,書き直しをする
repaint();
}
}
public void itemStateChanged(ItemEvent e){
// イベントのターゲットは GUI 部品のオブジェクトだが,
// これが Button クラスのインスタンスかどうかのチェック
System.out.println(e);
Object source=e.getSource();
// 押されたのがチェックボックスだった場合は、背景色を変化させる
if(source instanceof Checkbox){
back += 1;
repaint();
}
}
}
最後に、イベントが発生したときのメソッドを定義します。
というまあ単純なプログラムです。