next up previous
: 演習 : GUIコンポーネントにおけるイベントの処理 : 概要


プログラム例

以下に簡単なプログラム例を示す. このプログラムでは,GridLayoutを用いてアプレットを上下の二つの部分に分け, 上にButtonを,下にCanvasを配置している. Buttonを押すごとにCanvas上の異なる位置に文字列を表示させるために, ActionListenerを実装したButtonListenerクラスを内部に作成し,これを Buttonクラスに登録している. 以下簡単なプログラムの解説:

6〜22行目
Canvasクラスを拡張して,クラス内クラス(内部クラス) StringCanvas を定義している. 内部クラスは,定義されたクラス(ここでは ButtonActionEx)内でのみ有効なク ラスである. このクラスはボタンの押下状況(buttonPushed()メソッドで通知される)に応じ て,描画を行う paint()メソッドの実装が主である.
24〜36行目
ActionListnerインターフェイスを実装した ButtonListenerクラスを定義している. これはButtonが押されたときのイベントを処理するためのクラスで,対応するメ ソッドactionPerformed()メソッドを実装している.
32〜35行目
actionPerformed()メソッドでは,ボタンが押されたことを描 画用のStringCanvasクラスのインスタンスに通知(buttonPushed())し, 再描画(repaint())している. repaint()メソッドは,コンポーネントを消去し,paint()メソッドを呼び 出すことで再描画を行う.
41行目
Buttonクラスのインスタンスに,リスナーを登録する. リスナーは 24〜36行目で定義された ButtonListener クラスのインスタンスであ り,コンストラクタの引数として描画領域である StringCanvasのインスタンスを 渡している.
43〜45行目
アプレットの描画領域をGridLayoutによって上下に2分割し, 上に Buttonクラスのインスタンス,下にStringCanvasクラスのインスタ ンスを追加している.




\begin{boxedminipage}{15cm}
\renewedcommand {baselinestretch}{0.8}\begin{verbati...
...(button);
45: this.add(scanvas);
46: }
47: }\end{verbatim}\end{boxedminipage}



U-GM\murao 平成14年7月5日