什么是事件,其实很简!
我们在自己建立事件时,一般都是先建立一个自定义的事件类MyEvent继承于EventObject,再建立一个事件响应MyEventListener继承与EventListener,然后是建立一个自己的应用类来用我们自己这个事件:
如下:
public class MyFontEvent extends java.util.EventObject{
private int fontSize;;
private String fontName;
private int fontStyle;
private Object source;
public int getID(){return this.id;}
public int getFontStyle(){return this.fontStyle;}
public String getFontName(){return this.fontName;}
public MyEvent(Object source,String fontName,int fontStyle,int fontSize){
super(source);
this.fontName=fontName;
this.fontSize=fontSize;
this.fontStyle=fontStyle;
}
}
public interface MyEventListener extends java.util.EventListener{
public void myEventChanged(MyEvent event);
}
public class MyButton extends JButton{
public MyButton(String str){
super(str);
}
public void setFontSize(int size){
Font font=this.getFont();
Font newFont=new Font(font.getName(),font.getStyle(),size);
this.setFont(newFont);
fireFontChanged(new MyFontEvent(this,newFont.getName(),newFont.getStyle(),newFont.getSize());
}
public void setFontName(String fontName){
...
}
public void setFontStyle(int style){
...
}
public void addMyFontEventListener(MyEventListener listener){
listenerList.add(MyEventListener.class,listener);//其中的listenerList是继承与JComponet而来的
}
public void removeMyFontListener(MyEventListener listener){
listenerList.remove(MyEventListener.class,listener);
}
protected void fireFontChanged(MyFontEvent event){
EventListener[] list=(MyEventListener)(listenerList.getListerner(MyEventListerList.class));
for(int i=0;i<list.length;i++){
list[i].myEventChanged(event);
}
}
}
现在我们只是写一个类来用我们这个例子而已,在这里就不在写了。我们要做的就只是在这个类中的某个地方调用setFontSize(),setFontName()...而已,这可以在某个响应中如actionPerformed(),propertChanged()...
我们现在来分析一下他怎么实现的呢?
我们在代码中调用setFontSize()时,先是改变字体大小,然后是调用 fireFontChanged(),这时候先是在整个listenerList中取出所有MyEventListener(我们在写addMyFontListener()时已经添加了进去,其实listenerList就是一个数组,他的元素必须是EventListerer而已),再挨个激发每个listerner的myEventChanged.
那么为什么我们要继承EventObject,EventListener呢,那只是因为listenerList里面只能添加EventListener元素而已,假如你愿意你也可以不用listenerList,就可以不用继承了。
现在看来,事件响应的过程就是一个反射机制(不要说你不懂反射是何物!)
附:上面的代码是继承与JComponent,假如是其他的基类,只要你添加一个EventListener[] listenerList就可以了。
我的java也是刚学不久,不知道上面的说错了没有,好望高手指点,斧正,在此谢过!