次のサンプル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();
}
}
=============================================================================