プログラミング応用b 第12回 『GUIその3 (AWT/Swingによる応用的イベント処理)』


【チェックボックスとイベント処理の例】

 Swing版チェックボックスのイベント処理の例を紹介する。実行すると,2個のチェックボックスが配置された
ウィンドウが表示され,それぞれのチェックボックスをクリックして選択・解除するごとに,コンソール出力にその
内容が表示される。

 前回紹介した表
で,チェックボックスの選択を変化させたときに発生するイベントは ItemEvent 型オブジェクトで,
対応するリスナは, ItemListener である。呼ばれるメソッドは itemStateChanged( ) となる。

 List 2 の 9~32行目がリスナの実装クラスで, itemStateChanged( ) をオーバライドしている。

 13行目で ItemEvent型の getItemSelectable( ) メソッドを呼んでいるが,このメソッドはイベントソースの選択項目
オブジェクトを ItemSelectable 型で返す。前回紹介した継承・実装関係の図(中央やや左)を見ると分かるが,
ItemSelectable は,「選択可能な項目」の性質を定めているインタフェイスで, JCheckBox も間接的にこのインタフェイス
を実装している。

 チェックボックスが選択されているかどうかは JCheckBoxがスーパークラスのスーパークラス AbstractButton
から継承した isSelected( ) メソッドを使って調べる事ができる。

 また,MyApplicationクラスのコンストラクタ(34~57行目)でチェックボックスにリスナを登録しているが(42,46行目),
選択項目に ItemListener 型のリスナオブジェクトを登録するには, addItemListener( ) メソッドを利用する。

List 2 SwingCheckBoxTest.java

01import java.awt.*;
02import java.awt.event.*;
03import javax.swing.*;
04 
05class MyApplication  {
06    JFrame f;
07    JCheckBox jcb1, jcb2;
08 
09    class MyItemListener implements ItemListener {
10        public void itemStateChanged( ItemEvent e ) {
11            String msg = "";
12             
13            if( e.getItemSelectable() == jcb1 ) {
14                if( jcb1.isSelected() ) {
15                    msg = "選択肢1が選択された";
16                }
17                else {
18                    msg = "選択肢1の選択が解除された";
19                }
20            }
21            if( e.getItemSelectable() == jcb2 ) {
22                if( jcb2.isSelected() ) {
23                    msg = "選択肢2が選択された";
24                }
25                else {
26                    msg = "選択肢2の選択が解除された";
27                }
28            }
29             
30            System.out.println( msg );
31        }
32    }
33 
34    public MyApplication( String str ) {
35        f = new JFrame( str );
36        f.setSize(350, 80);
37        Container c = f.getContentPane( );
38        c.setLayout( new FlowLayout( ) );
39 
40        jcb1 = new JCheckBox( "選択肢1" );
41        c.add( jcb1 );
42        jcb1.addItemListener( new MyItemListener( ) );
43 
44        jcb2 = new JCheckBox( "選択肢2" );
45        c.add( jcb2 );
46        jcb2.addItemListener( new MyItemListener( ) );
47 
48        // ウィンドウを閉じたときにプログラムも終了するように設定する。
49        f.addWindowListener(
50            new WindowAdapter( ) {
51                public void windowClosing( WindowEvent e ) {
52                    System.exit( 0 );
53                }
54            }
55        );
56        f.setVisible( true );
57    }
58}
59 
60class SwingCheckBoxTest {
61    public static void main( String args[ ] ) {
62        MyApplication app = new MyApplication( "チェックボックスの使用例" );
63    }
64}

次に進む