java事件机制

java事件有三个角色

事件源--事件发生的源头,如一个button

事件--通过事件源生成

事件监听器--注册在事件源上,当事件源状态改变时执行其中方法

 

example:

1.定义事件源

 

package com.test.event;

import java.util.EventListener;
import java.util.EventObject;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class EventSource {
    
    //存储事件源的所有监听者
    private Set listeners = new HashSet();
    
    public void addListener(EventListener listener){
        listeners.add(listener);
    }
    
    //事件源状态改变
    public void changeSource(EventObject event){
        System.out.println("事件源状态改变!");
        for(Iterator it = listeners.iterator(); it.hasNext();){
            ClickListener listener = (ClickListener) it.next();
            //事件源状态改变时执行监听器方法
            listener.clickChanged(event);
        }
    }
}
 

 2.定义事件

 

package com.test.event;

import java.util.EventObject;

public class ClickEvent extends EventObject {

    //由事件源生成事件
    public ClickEvent(Object source) {
        super(source);
    }

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

}

 3.定义监听器接口

 

package com.test.event;

import java.util.EventListener;
import java.util.EventObject;

public interface ClickListener extends EventListener {
    
    public void clickChanged(EventObject event);
}

 4.定义监听器实现

 

package com.test.event;

import java.util.EventObject;

public class ClickListenerImpl implements ClickListener {

    public void clickChanged(EventObject event) {
        System.out.println("监听器方法已经执行!");
    }
}

 5.测试

 

package com.test.event;

import java.util.EventObject;

public class test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        //创建一个事件源
        EventSource source = new EventSource();
        //通过事件源创建一个事件类
        EventObject event = new ClickEvent(source);
        //创建一个监听器
        ClickListener listener = new ClickListenerImpl();
        //给事件源添加监听器
        source.addListener(listener);
        //触发事件源
        source.changeSource(event);
    }
}

 运行结果:

 

事件源状态改变!

监听器方法已经执行!

 

你可能感兴趣的:(java)