next up previous contents
Next: 無名のListener Up: JDK1.1のイベント・モデル Previous: 新しいイベント・クラス

Adapterの利用

次のサンプル4は、サンプル3では沢山あったListener実装のAdapterクラスを 一つにまとめています。実際には、クラスは一つですが、処理に応じて 異なるインスタンスが生成されているだけなのですが、プログラムを見た印象は 異なります。ある意味で、サンプル1での、イベントの発生源で処理を 分けて行くスタイルに、似ているかも知れません。

== サンプル4 ===============================================================

import java.awt.*;
import java.awt.event.*;

class Adapter extends WindowAdapter implements 
  ActionListener, ItemListener, FocusListener
{
  Sample4 s4;
  int sort;

  public Adapter(Sample4 s4 ,int sort){
     this.s4 = s4 ;
     this.sort = sort ;
  }

  public void windowClosing(WindowEvent evt){
     System.exit(0);
  }
  public void actionPerformed(ActionEvent evt){
    switch( sort ){
      case s4.BUTTON_1:
        s4.textfield.setText("ボタンが押されました。" );
        break ;
    }
  }
  public void itemStateChanged(ItemEvent evt){
    switch( sort ){
      case s4.CHECKBOX_2:
        if ( s4.checkbox.getState() ){
           s4.textfield.setText("チェックされました。" );
        } else {
           s4.textfield.setText("チェックが外されました。" );
        }
        break;
      case s4.LIST_3 :
        s4.textfield.setText(s4.list.getSelectedItem() + "が選ばれました。" );
        break ;
      case s4.CHOICE_4 :
        s4.textfield.setText(s4.choice.getSelectedItem() + "が選ばれました。" );
        break ;
    }
  }
  public void focusLost(FocusEvent evt){
    switch( sort ){
      case s4.TEXTFIELD_5:
        s4.textfield.setText("フォーカスが無くなりました。");
        break ;
    }
  }
  public void focusGained(FocusEvent evt){
    switch( sort ){
      case s4.TEXTFIELD_5:   
        s4.textfield.setText("フォーカスがあります。");
        break ;
    }
  }
}

class Sample4 extends Frame {

  static final int FRAME_0 = 0 ;
  static final int BUTTON_1 = 1 ;
  static final int CHECKBOX_2 = 2 ;
  static final int LIST_3 = 3 ;
  static final int CHOICE_4 = 4 ;
  static final int TEXTFIELD_5 = 5 ;

  Button    button ;
  Checkbox  checkbox ;
  List      list ;
  Choice    choice ;
  Panel     panel ;
  TextField textfield ;

  Sample4(){

    button = new Button("ボタン");
    checkbox = new Checkbox("チェック");
    list = new List(1);
    list.add("リスト1");
    list.add("リスト2"); 
    list.add("リスト3");
    choice = new Choice();
    choice.add("チョイス1");
    choice.add("チョイス2");
    choice.add("チョイス3");

    panel = new Panel();
    panel.add(button);
    panel.add(checkbox);
    panel.add(list);
    panel.add(choice);
    add(panel,"North");

    textfield = new TextField();
    add(textfield,"South");

    button.addActionListener(new Adapter(this,BUTTON_1));
    checkbox.addItemListener(new Adapter(this,CHECKBOX_2));
    list.addItemListener(new Adapter(this,LIST_3));
    choice.addItemListener(new Adapter(this,CHOICE_4));
    textfield.addFocusListener(new Adapter(this,TEXTFIELD_5));
    addWindowListener(new Adapter(this,FRAME_0));

    pack();
    setVisible(true);
  }

  public static void main(String argv[]){
     new Sample4();
  }
}

=============================================================================



maruyama@wakhok.ac.jp