1298121346**[cfd]javaイベントリスナーの件

イベントリスナーの実装方法には、本体のクラスにメソッドとして入れ込んだり、内部クラスにしたりあるみたいなんだが、自分はjava初心者なので最もまとも(だけど面倒くさそう)な、別クラスに入れる方法にした。
この場合、イベントリスナーを入れたほうのクラスが誰から呼ばれたのか分からなくなるので、本体クラス側には「イベントリスナーのフィールド変数になっているオブジェクトは自分のことだよ」と書かないといけないようだ。ほんで、

// Botan.java
import java.applet.Applet;
import java.awt.Button;
public class Botan extends Applet{
	Button btn;
	public void init(){
		btn = new Button("開始");
		add(btn);

		Ebento be = new Ebento();
		be.b = this;
		btn.addActionListener(be);
	}
}

// Ebento.java
import java.awt.event.*;
public class Ebento implements ActionListener{
	Botan b;
	public void actionPerformed(ActionEvent e){
		b.btn.setLabel("中止");
	}
}

な感じでちゃんと動いたのだが、もっと厳密にはフィールド変数のbtnやbは隠蔽して(privateにして)、setter/getterを使うべきなのかなぁ。頭が熱暴走しそうなのでまた明日考えよ。