一些listene接口中只定义了一个方法,因此要实现这种接口的工作量并不大,因为只要写完这一个方法,接口也就实现了。但是如果要使用有多个方法的listener的话,就会比较麻烦了,因为必须要实现接口中定义的所有方法,而实际上很多方法我们并不需要。举例来说,如果要捕捉鼠标点击的话,那就必须写一个mouseClicked( )方法。但是由于MouseListener是一个interface,所以即使MouseListener定义的其他方法我们不使用,也得实现其所有的方法。
为了解决这个问题,有些(但不是全部)多方法的listener接口提供了适配器(adapter)。适配器会为接口提供默认的空方法。这样,你只要继承适配器,根据需要覆写方法就可以了。
例如:
packagecom.vitamin.UI;
![None.gif](/Images/OutliningIndicators/None.gif)
importjava.awt.BorderLayout;
importjava.awt.Container;
importjava.awt.Event;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.MouseAdapter;
importjava.awt.event.*;
![None.gif](/Images/OutliningIndicators/None.gif)
importjavax.swing.*;
![None.gif](/Images/OutliningIndicators/None.gif)
publicclassHelloFormextendsJFrame
{
privateJLabellbInfo=null;
privateJButtonbtnOK=null;
![None.gif](/Images/OutliningIndicators/None.gif)
publicHelloForm()
{
super();
}
publicHelloForm(Stringtitle)
{
super(title);
this.initForm();
}
![None.gif](/Images/OutliningIndicators/None.gif)
privatevoidinitForm()
{
this.lbInfo=newJLabel();
this.btnOK=newJButton("确定");
![None.gif](/Images/OutliningIndicators/None.gif)
this.btnOK.addMouseListener(newMouseAdapter()
{
publicvoidmouseClicked(MouseEvente){
lbInfo.setText("hello,world");
}
});
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
Containercon=this.getContentPane();
con.setLayout(newBorderLayout());
con.add(this.btnOK,BorderLayout.SOUTH);
con.add(this.lbInfo,BorderLayout.NORTH);
![None.gif](/Images/OutliningIndicators/None.gif)
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300,300);
this.setVisible(true);
}
/**
*@paramargs
*/
publicstaticvoidmain(String[]args)
{
HelloFormhf=newHelloForm("内部匿名类测试程序");
![None.gif](/Images/OutliningIndicators/None.gif)
}
![None.gif](/Images/OutliningIndicators/None.gif)
}
在附上<<TIJ>>中给出的一段处理多个事件的代码:
packagecom.vitamin.UI;
![None.gif](/Images/OutliningIndicators/None.gif)
importjavax.swing.
*
;
importjava.awt.
*
;
importjava.awt.
event
.
*
;
importjava.util.
*
;
importcom.vitamin.Console.console;
![None.gif](/Images/OutliningIndicators/None.gif)
![ExpandedBlockStart.gif](/Images/OutliningIndicators/ExpandedBlockStart.gif)
public
class
TrackEventextendsJApplet
{
privateHashMaph=newHashMap();
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
privateString[]event=
{
"focusGained","focusLost","keyPressed",
"keyReleased","keyTyped","mouseClicked",
"mouseEntered","mouseExited","mousePressed",
"mouseReleased","mouseDragged","mouseMoved"
};
privateMyButton
b1=newMyButton(Color.BLUE,"test1"),
b2=newMyButton(Color.RED,"test2");
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
classMyButtonextendsJButton
{
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
voidreport(Stringfield,Stringmsg)
{
((JTextField)h.get(field)).setText(msg);
}
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
FocusListenerfl=newFocusListener()
{
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
publicvoidfocusGained(FocusEvente)
{
report("focusGained",e.paramString());
}
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
publicvoidfocusLost(FocusEvente)
{
report("focusLost",e.paramString());
}
};
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
KeyListenerkl=newKeyListener()
{
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
publicvoidkeyPressed(KeyEvente)
{
report("keyPressed",e.paramString());
}
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
publicvoidkeyReleased(KeyEvente)
{
report("keyReleased",e.paramString());
}
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
publicvoidkeyTyped(KeyEvente)
{
report("keyTyped",e.paramString());
}
};
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
MouseListenerml=newMouseListener()
{
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
publicvoidmouseClicked(MouseEvente)
{
report("mouseClicked",e.paramString());
}
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
publicvoidmouseEntered(MouseEvente)
{
report("mouseEntered",e.paramString());
}
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
publicvoidmouseExited(MouseEvente)
{
report("mouseExited",e.paramString());
}
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
publicvoidmousePressed(MouseEvente)
{
report("mousePressed",e.paramString());
}
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
publicvoidmouseReleased(MouseEvente)
{
report("mouseReleased",e.paramString());
}
};
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
MouseMotionListenermml=newMouseMotionListener()
{
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
publicvoidmouseDragged(MouseEvente)
{
report("mouseDragged",e.paramString());
}
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
publicvoidmouseMoved(MouseEvente)
{
report("mouseMoved",e.paramString());
}
};
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
publicMyButton(Colorcolor,Stringlabel)
{
super(label);
setBackground(color);
addFocusListener(fl);
addKeyListener(kl);
addMouseListener(ml);
addMouseMotionListener(mml);
}
}
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
publicvoidinit()
{
Containerc=getContentPane();
c.setLayout(newGridLayout(event.length+1,2));
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for(inti=0;i<event.length;i++)
{
JTextFieldt=newJTextField();
t.setEditable(false);
c.add(newJLabel(event[i],JLabel.RIGHT));
c.add(t);
h.put(event[i],t);
}
c.add(b1);
c.add(b2);
}
![ExpandedSubBlockStart.gif](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
publicstaticvoidmain(String[]args)
{
console.run(newTrackEvent(),700,500);
}
}
另外,今天还尝试了下手工打包可执行的jar文件,可没有成功,找不到原因,郁闷。。。