事件狀態(tài)對(duì)象(Event State Object) 與事件發(fā)生有關(guān)的狀態(tài)信息一般都封裝在一個(gè)事件狀態(tài)對(duì)象中,這種對(duì)象是java.util.EventObject的子類。按設(shè)計(jì)習(xí)慣,這種事件狀態(tài)對(duì)象類的名應(yīng)以Event結(jié)尾。例如: public class MouseMovedExampleEvent extends java.util.EventObject { PRotected int x, y; /* 創(chuàng)建一個(gè)鼠標(biāo)移動(dòng)事件MouseMovedExampleEvent */ MouseMovedExampleEvent(java.awt.Component source, Point location) { super(source); x = location.x; y = location.y; } /* 獲取鼠標(biāo)位置*/ public Point getLocation() { return new Point(x, y); }} 事件監(jiān)聽(tīng)者接口與事件監(jiān)聽(tīng)者
public void add< ListenerType>(< ListenerType> listener); public void remove< ListenerType>(< ListenerType> listener);
例如首先定義了一個(gè)事件監(jiān)聽(tīng)者接口:
public interface ModelChangedListener extends java.util.EventListener { void modelChanged(EventObject e); }
接著定義事件源類: public abstract class Model { private Vector listeners = new Vector(); // 定義了一個(gè)儲(chǔ)存事件監(jiān)聽(tīng)者的數(shù)組 /*上面設(shè)計(jì)格式中的< ListenerType>在此處即是下面的ModelChangedListener*/
public synchronized void addModelChangedListener (ModelChangedListener mcl) { listeners.addElement(mcl); }//把監(jiān)聽(tīng)者注冊(cè)入listeners數(shù)組中 public synchronized void removeModelChangedListener(ModelChangedListener mcl) { listeners.removeElement(mcl); //把監(jiān)聽(tīng)者從listeners中注銷 }
在C#中,事件(Events)成員就是用來(lái)聲明一個(gè)類事件的。在類中聲明一個(gè)事件成員一般采用如下的語(yǔ)法形式: public event 代表名 事件名。 如在Control類中聲明了一個(gè)Click事件成員,其語(yǔ)法如下: public event EventHandler Click;