next up previous contents
Next: Naming rulesのまとめ Up: JDK1.1のイベント・モデル Previous: Adapterの利用

無名のListener

最後の例は、JDK1.1で新たに導入された、Inner Class を使って、 先のサンプル3を書き換えたものです。これは、なかなか面白いコードだと思います。

== サンプル5 ===============================================================
import java.awt.*;
import java.awt.event.*;

class App {  
   public static void main(String argv[]){
     App app = new App();
     GUI gui = app.new GUI();
  }

  class GUI extends Frame {

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

  GUI(){
    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 ActionListener(){
        public void actionPerformed(ActionEvent evt){
          textfield.setText("ボタンが押されました。" );
        }
      }
    );
    checkbox.addItemListener(
      new ItemListener(){
        public void itemStateChanged(ItemEvent evt){
          if ( checkbox.getState() ){
            textfield.setText("チェックされました。" );
          } else {
            textfield.setText("チェックが外されました。" );
          }
       }
     }
    );
    list.addItemListener(
      new ItemListener(){
        public void itemStateChanged(ItemEvent evt){
          textfield.setText(list.getSelectedItem() + "が選ばれました。" );
        }
      }
    );
    choice.addItemListener(
      new ItemListener(){ 
        public void itemStateChanged(ItemEvent evt){
          textfield.setText(choice.getSelectedItem() + "が選ばれました。" );
        }
      }
    );
    textfield.addFocusListener(
      new FocusListener(){
        public void focusLost(FocusEvent evt){
          textfield.setText("フォーカスが無くなりました。");
        }
        public void focusGained(FocusEvent evt){
          textfield.setText("フォーカスがあります。");
        }
      }
    );
    addWindowListener(
      new WindowAdapter(){
        public void windowClosing(WindowEvent evt){
           System.exit(0);
        }
      }
    );

    pack();
    setVisible(true);
  }

 }
}

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


maruyama@wakhok.ac.jp