一些listene接口中只定义了一个方法,因此要实现这种接口的工作量并不大,因为只要写完这一个方法,接口也就实现了。但是如果要使用有多个方法的listener的话,就会比较麻烦了,因为必须要实现接口中定义的所有方法,而实际上很多方法我们并不需要。举例来说,如果要捕捉鼠标点击的话,那就必须写一个mouseClicked( )方法。但是由于MouseListener是一个interface,所以即使MouseListener定义的其他方法我们不使用,也得实现其所有的方法。

为了解决这个问题,有些(但不是全部)多方法的listener接口提供了适配器(adapter)。适配器会为接口提供默认的空方法。这样,你只要继承适配器,根据需要覆写方法就可以了。

例如:

None.gifpackage com.vitamin.UI;
None.gif
None.gifimport java.awt.BorderLayout;
None.gifimport java.awt.Container;
None.gifimport java.awt.Event;
None.gifimport java.awt.event.ActionEvent;
None.gifimport java.awt.event.ActionListener;
None.gifimport java.awt.event.MouseAdapter;
None.gifimport java.awt.event.*;
None.gif
None.gifimport javax.swing.*;
None.gif
None.gifpublic class HelloForm extends JFrame
None.gif{
None.gif    private JLabel lbInfo = null;
None.gif    private JButton btnOK = null;
None.gif
None.gif    public HelloForm() 
None.gif    {
None.gif        super();
None.gif    }
None.gif    public HelloForm(String title)
None.gif    {
None.gif        super(title);
None.gif        this.initForm();
None.gif    }
None.gif    
None.gif    private void initForm()
None.gif    {
None.gif        this.lbInfo = new JLabel();
None.gif        this.btnOK = new JButton("确定");
None.gif
None.gif        this.btnOK.addMouseListener(new MouseAdapter()
None.gif        {
None.gif            public void mouseClicked(MouseEvent e) {
None.gif                lbInfo.setText("hello,world");
None.gif            }
None.gif        });

None.gif        
None.gif        
None.gif        
None.gif        Container con = this.getContentPane();
None.gif        con.setLayout(new BorderLayout());
None.gif        con.add(this.btnOK,BorderLayout.SOUTH);
None.gif        con.add(this.lbInfo,BorderLayout.NORTH);
None.gif        
None.gif        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
None.gif        this.setSize(300,300);
None.gif        this.setVisible(true);
None.gif    }
None.gif    /**
None.gif     * @param args
None.gif     */
None.gif    public static void main(String[] args) 
None.gif    {
None.gif        HelloForm hf = new HelloForm("内部匿名类测试程序");
None.gif
None.gif    }
None.gif
None.gif}
None.gif

在附上<<TIJ>>中给出的一段处理多个事件的代码:
None.gifpackage com.vitamin.UI;
None.gif
None.gifimport javax.swing.
*;
None.gifimport java.awt.
*;
None.gifimport java.awt.
event.*;
None.gifimport java.util.
*;
None.gifimport com.vitamin.Console.console;
None.gif
ExpandedBlockStart.gifContractedBlock.gif
public class TrackEvent extends JApplet dot.gif{
InBlock.gif  
private HashMap h = new HashMap();
ExpandedSubBlockStart.gifContractedSubBlock.gif  
private String[] event = dot.gif{
InBlock.gif    
"focusGained""focusLost""keyPressed",
InBlock.gif    
"keyReleased""keyTyped""mouseClicked",
InBlock.gif    
"mouseEntered""mouseExited""mousePressed",
InBlock.gif    
"mouseReleased""mouseDragged""mouseMoved"
ExpandedSubBlockEnd.gif  }
;
InBlock.gif  
private MyButton
InBlock.gif    b1 
= new MyButton(Color.BLUE, "test1"),
InBlock.gif    b2 
= new MyButton(Color.RED, "test2");
ExpandedSubBlockStart.gifContractedSubBlock.gif  
class MyButton extends JButton dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif    
void report(String field, String msg) dot.gif{
InBlock.gif      ((JTextField)h.
get(field)).setText(msg);
ExpandedSubBlockEnd.gif    }

ExpandedSubBlockStart.gifContractedSubBlock.gif    FocusListener fl 
= new FocusListener() dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif      
public void focusGained(FocusEvent e) dot.gif{
InBlock.gif        report(
"focusGained", e.paramString());
ExpandedSubBlockEnd.gif      }

ExpandedSubBlockStart.gifContractedSubBlock.gif      
public void focusLost(FocusEvent e) dot.gif{
InBlock.gif        report(
"focusLost", e.paramString());
ExpandedSubBlockEnd.gif      }

ExpandedSubBlockEnd.gif    }
;
InBlock.gif    
ExpandedSubBlockStart.gifContractedSubBlock.gif    KeyListener kl 
= new KeyListener() dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif      
public void keyPressed(KeyEvent e) dot.gif{
InBlock.gif        report(
"keyPressed", e.paramString());
ExpandedSubBlockEnd.gif      }

ExpandedSubBlockStart.gifContractedSubBlock.gif      
public void keyReleased(KeyEvent e) dot.gif{
InBlock.gif        report(
"keyReleased", e.paramString());
ExpandedSubBlockEnd.gif      }

ExpandedSubBlockStart.gifContractedSubBlock.gif      
public void keyTyped(KeyEvent e) dot.gif{
InBlock.gif        report(
"keyTyped", e.paramString());
ExpandedSubBlockEnd.gif      }

ExpandedSubBlockEnd.gif    }
;
InBlock.gif    
ExpandedSubBlockStart.gifContractedSubBlock.gif    MouseListener ml 
= new MouseListener() dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif      
public void mouseClicked(MouseEvent e) dot.gif{
InBlock.gif        report(
"mouseClicked", e.paramString());
ExpandedSubBlockEnd.gif      }

ExpandedSubBlockStart.gifContractedSubBlock.gif      
public void mouseEntered(MouseEvent e) dot.gif{
InBlock.gif        report(
"mouseEntered", e.paramString());
ExpandedSubBlockEnd.gif      }

ExpandedSubBlockStart.gifContractedSubBlock.gif      
public void mouseExited(MouseEvent e) dot.gif{
InBlock.gif        report(
"mouseExited", e.paramString());
ExpandedSubBlockEnd.gif      }

ExpandedSubBlockStart.gifContractedSubBlock.gif      
public void mousePressed(MouseEvent e) dot.gif{
InBlock.gif        report(
"mousePressed", e.paramString());
ExpandedSubBlockEnd.gif      }

ExpandedSubBlockStart.gifContractedSubBlock.gif      
public void mouseReleased(MouseEvent e) dot.gif{
InBlock.gif        report(
"mouseReleased", e.paramString());
ExpandedSubBlockEnd.gif      }

ExpandedSubBlockEnd.gif    }
;
InBlock.gif    
ExpandedSubBlockStart.gifContractedSubBlock.gif    MouseMotionListener mml 
= new MouseMotionListener() dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif      
public void mouseDragged(MouseEvent e) dot.gif{
InBlock.gif        report(
"mouseDragged", e.paramString());
ExpandedSubBlockEnd.gif      }

ExpandedSubBlockStart.gifContractedSubBlock.gif      
public void mouseMoved(MouseEvent e) dot.gif{
InBlock.gif        report(
"mouseMoved", e.paramString());
ExpandedSubBlockEnd.gif      }

ExpandedSubBlockEnd.gif    }
;
InBlock.gif    
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public MyButton(Color color, String label) dot.gif{
InBlock.gif      super(label);
InBlock.gif      setBackground(color);
InBlock.gif      addFocusListener(fl);
InBlock.gif      addKeyListener(kl);
InBlock.gif      addMouseListener(ml);
InBlock.gif      addMouseMotionListener(mml);
ExpandedSubBlockEnd.gif    }

ExpandedSubBlockEnd.gif  }

ExpandedSubBlockStart.gifContractedSubBlock.gif  
public void init() dot.gif{
InBlock.gif    Container c 
= getContentPane();
InBlock.gif    c.setLayout(
new GridLayout(event.length + 12));
ExpandedSubBlockStart.gifContractedSubBlock.gif    
for(int i = 0; i < event.length; i++dot.gif{
InBlock.gif      JTextField t 
= new JTextField();
InBlock.gif      t.setEditable(
false);
InBlock.gif      c.add(
new JLabel(event[i], JLabel.RIGHT));
InBlock.gif      c.add(t);
InBlock.gif      h.put(
event[i], t);
ExpandedSubBlockEnd.gif    }

InBlock.gif    c.add(b1);
InBlock.gif    c.add(b2);
ExpandedSubBlockEnd.gif  }

ExpandedSubBlockStart.gifContractedSubBlock.gif  
public static void main(String[] args) dot.gif{
InBlock.gif    console.run(
new TrackEvent(), 700500);
ExpandedSubBlockEnd.gif  }

ExpandedBlockEnd.gif}
另外,今天还尝试了下手工打包可执行的jar文件,可没有成功,找不到原因,郁闷。。。