例として、ボタンが押されるたびに異なる乱数を表示する「ランダムナンバージェネレータ」を紹介しましょう。大げさに名前まで付けてしまいましたが、単に 0 から 1 の乱数を表示するという単純なプログラムです。
Sample31.java
01|/* <applet code="Sample31.class" width="150" height="120"></applet> */ 02|import java.applet.Applet; 03|import java.awt.*; 04|import java.awt.event.*; 05| 06|public class Sample31 extends Applet 07| implements ActionListener 08|{ 09| // コンポーネントの変数を定義 10| Button button; 11| Label label; 12| 13| public void init(){ 14| // オブジェクトの作成 15| button = new Button( "Click me!"); 16| label = new Label("Click the button!"); 17| 18| // ボタンをリスナーに登録する 19| button.addActionListener( this); 20| 21| // レイアウトの設定 22| this.setLayout( new GridLayout( 2, 1)); 23| 24| // コンポーネントをアプレットに追加する 25| this.add( button); 26| this.add( label); 27| } 28| 29| /* 30| * ActionEvent を受け取って処理する。 31| */ 32| public void actionPerformed( ActionEvent ev){ 33| if( ev.getSource() == this.button){ 34| this.label.setText( "a = " + Math.random()); 35| } 36| } 37|}
Sample31の実行結果は図のようになります。
図 35: Sample31 実行結果
イベントの処理に関係する部分を太字にしました。
まず7行目ですが、いままでになかった implements ActionListener という語が追加されています。これは Sample31 クラスに ActionListener を実装せよという命令です。これによりSample31クラスはActionListenerインタフェースを実装したことになります。
19行目で、生成したボタンオブジェクトをこのアプレットのリスナーへ登録しています。このリスナーへの登録を行わないと、リスナーを実装していてもボタンオブジェクトから発生したイベントはリスナーを素通りしてしまいますので注意してください。
32行目から36行目が、ボタンオブジェクトで発生したイベントを処理する部分になります。actionPerformed() というメソッドを定義していますが、これはインタフェースで「私を実装したクラスはこのメソッドを定義しなさいよ」と宣言されていたメソッドです。1このメソッドは引数として、自分が捕まえたイベントを持っています。33行目のif文で、リスナーが捕まえたイベントが確かに我々が意図したボタンから発生したものかどうかを確かめています。ボタンが複数あるときには必要な作業です。我々が意図したボタンからのイベントであれば、34行目でラベルに表示される乱数を更新しています。
新しくイベントとリスナーが登場しましたが、そんなに扱いにくそうなものではないですよね?
この調子で残りも見ていきましょう。
最終更新時間:2011年01月08日 18時31分16秒