イベントリスナーの実装方法には、本体のクラスにメソッドとして入れ込んだり、内部クラスにしたりあるみたいなんだが、自分は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を使うべきなのかなぁ。頭が熱暴走しそうなのでまた明日考えよ。