プログラミング応用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
02 | import java.awt.event.*; |
09 | class MyItemListener implements ItemListener { |
10 | public void itemStateChanged( ItemEvent e ) { |
13 | if ( e.getItemSelectable() == jcb1 ) { |
14 | if ( jcb1.isSelected() ) { |
18 | msg = "選択肢1の選択が解除された" ; |
21 | if ( e.getItemSelectable() == jcb2 ) { |
22 | if ( jcb2.isSelected() ) { |
26 | msg = "選択肢2の選択が解除された" ; |
30 | System.out.println( msg ); |
34 | public MyApplication( String str ) { |
35 | f = new JFrame( str ); |
37 | Container c = f.getContentPane( ); |
38 | c.setLayout( new FlowLayout( ) ); |
40 | jcb1 = new JCheckBox( "選択肢1" ); |
42 | jcb1.addItemListener( new MyItemListener( ) ); |
44 | jcb2 = new JCheckBox( "選択肢2" ); |
46 | jcb2.addItemListener( new MyItemListener( ) ); |
50 | new WindowAdapter( ) { |
51 | public void windowClosing( WindowEvent e ) { |
60 | class SwingCheckBoxTest { |
61 | public static void main( String args[ ] ) { |
62 | MyApplication app = new MyApplication( "チェックボックスの使用例" ); |
次に進む