java事件。

来源:互联网 发布:java prototype 编辑:程序博客网 时间:2024/05/18 02:27

事件一共有三个主体。

1.事件源(Source Object),事件的发起者。

2.监听器(Listener),监听事件的人。

3.事件(Event)本身。


举个栗子:

你在看某个漂亮小姐姐的直播,当这个小姐姐给你唱了首歌的时候,你给他打赏了一个土豪飞机礼物。


1.上面这句话中,小姐姐是事件源,而你则是监听器,监听着小姐姐。

2.小姐姐唱歌了,你则打赏了礼物。这两个步骤是一个连贯的事情,而这个事情可以清楚的知道事件源和做出反应的人是谁。



流程:在事件源中注册监听器,当满足了一定条件之后调用监听器的方法,创建一个事件对象作为参数传进去。而事件对象中记录了事件源



java.util.EventListener

所有监听器必须实现该接口,该接口没有任何方法只是一个规范。


java.util.EventObject

该类为事件对象本身。类中有成员变量专门记录事件源。即发起事件的对象。


/** * 事件源 * * Created by Max on 2017/8/11. */public class XiaoJieJie {    //注册事件    private EventListener eventListener;    private int age;    XiaoJieJie(){};    XiaoJieJie(EventListener eventListener){        this.eventListener = eventListener;    }    //唱歌    public void sing(){        ++age;        if(eventListener != null){            //调用注册器方法。新建事件对象,当前对象为事件源。            ((MyEventListener)eventListener).daShang(new MyEvent(this));        }    }    public EventListener getEventListener() {        return eventListener;    }    public void setEventListener(EventListener eventListener) {        this.eventListener = eventListener;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}


/** * 监听器 * * Created by Max on 2017/8/11. */public class MyEventListener implements EventListener {    //监听着    private String name;    MyEventListener(String name){        this.name = name;    }    //打赏方法    void daShang(MyEvent event){        System.out.println("小姐姐唱歌了," + name + "打赏土豪飞机礼物了~");    }}


/** * 事件对象,作为参数传给监听器,事件对象中记录了事件源。 * * Created by Max on 2017/8/11. */public class MyEvent extends EventObject {    /**     * Constructs a prototypical Event.     *     * @param source The object on which the Event initially occurred.     * @throws IllegalArgumentException if source is null.     */    public MyEvent(Object source) {        super(source);    }    //获取事件源    public Object getEventSource(){        return getSource();    }}


public class Test {    public static void main(String[] args) {        XiaoJieJie p = new XiaoJieJie(new MyEventListener("张三"));        p.sing();//输出 小姐姐唱歌了,张三打赏土豪飞机礼物了~    }}


监听一件事情是可以被代理的,有一天你有事情,晚上不能给小姐姐打赏,但是你可以让你室友来帮你做这件事情。
让他来帮你打赏,要注意的是,此时事情的发起者是小姐姐,逻辑上来说意图监听这件事情的人还是你,只不过你室友在帮你监听而已。

java.util.

EventListenerProxy<T extends EventListener>
该抽象类可以帮你代理你自定义的事件。
/** *  事件注册代理 * * Created by Max on 2017/8/11. */public class MyEventListenerProxy extends EventListenerProxy<MyEventListener> {    //代理者    private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    /**     * Creates a proxy for the specified listener.     *     * @param listener the listener object     */    public MyEventListenerProxy(MyEventListener listener) {        super(listener);    }    public void register(XiaoJieJie p){        p.setEventListener(getListener());    }}
public class Test {    public static void main(String[] args) {//        XiaoJieJie p = new XiaoJieJie(new MyEventListener("张三"));//        p.sing();//输出 小姐姐唱歌了,张三打赏土豪飞机礼物了~        XiaoJieJie p1 = new XiaoJieJie();        //李四基友帮助李四完成打赏这件事情。        MyEventListenerProxy eventListenerProxy = new MyEventListenerProxy(new MyEventListener("李四"));        eventListenerProxy.setName("李四基友");        eventListenerProxy.register(p1);        p1.sing();//输出 小姐姐唱歌了,李四打赏土豪飞机礼物了~    }}




原创粉丝点击