チョイスの項目が変更されたときにはItemEvent というイベントが発生します。ItemEvent を受け取るには ItemListener を実装します。選ばれた選択肢によって表示される円の大きさが変化するプログラムを例に見てみましょう。
Sample33.java
01|/* <applet code="Sample33.class" width="100" height="120"></applet> */
02|import java.applet.Applet;
03|import java.awt.*;
04|import java.awt.event.*;
05|
06|public class Sample33 extends Applet
07| implements ItemListener
08|{
09| // コンポーネントの変数を定義
10| Choice choice;
11| SampleCanvas sampleCanvas;
12|
13| public void init(){
14| // オブジェクトの作成
15| choice = new Choice();
16| sampleCanvas = new SampleCanvas();
17|
18| // チョイスに項目を追加
19| choice.add("50");
20| choice.add("100");
21| choice.add("150");
22|
23| // リスナーに登録する
24| choice.addItemListener( this);
25|
26| // レイアウトの設定
27| this.setLayout( new BorderLayout());
28|
29| // パネルを作成
30| Panel p = new Panel();
31| p.setLayout( new GridLayout( 1, 2));
32| p.add( new Label( "radius", Label.CENTER));
33| p.add( choice);
34|
35| // コンポーネントをアプレットに追加する
36| this.add( p, BorderLayout.NORTH);
37| this.add( sampleCanvas, BorderLayout.CENTER);
38| }
39|
40| /*
41| * ItemEvent を受け取って処理する。
42| */
43| public void itemStateChanged( ItemEvent ev){
44| if( ev.getSource() == this.choice){
45| int r = Integer.parseInt( (String)ev.getItem());
46| this.sampleCanvas.setRadius( r);
47| this.sampleCanvas.repaint();
48| }
49| }
50|}
Sample33 も ActionListener が ItemListener になった以外は今までのものとほとんど変わりありません。41行目で(String)ev.getItem() という風に記述してあります。これは ItemEvent クラスの getItem() メソッドの戻り値が Object 型であるのに対し、Integer クラスの parseInt メソッドに指定できるのは String 型と決まっているので Object型から String 型へ強制的に型変換を行っています。このように、明示的に型を変換することを型キャストするといいます。
Sample33の実行結果は図のようになります。
図 37: Sample33 の実行結果
最終更新時間:2011年01月08日 18時39分14秒