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