java事件模型
事件模型三要素:事件对象,事件源,事件监听器
事件对象: 表示发生了什么事
事件源: 表示是产生这个事件的对象
事件监听器: 表示接收到对象后,对这个事件进行处理
直接看代码:
这是一个事件监听器的接口
//事件监听器
public interface EmotionListener {
//表示监听要处理什么事件,因为不知道这个事件将来是什么,所以定义成接口
void doSomething(EmotionObject event);
}
这是一个事件对象的类
//事件对象
public class EmotionObject {
private String name;
private String desc;
//关联事件源,表示是哪个事件对象产生的具体事件
private EmotionSource source;
public EmotionObject(String name, String desc, EmotionSource source) {
this.name = name;
this.desc = desc;
this.source = source;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public EmotionSource getSource() {
return source;
}
public void setSource(EmotionSource source) {
this.source = source;
}
}
这是一个事件源的类
import java.util.ArrayList;
import java.util.List;
//事件源
public class EmotionSource {
private String name;
//一个事件源可以让多个监听器监听
private List<EmotionListener> list = new ArrayList<EmotionListener>();
public EmotionSource() {
}
public EmotionSource(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void addEmontionList(EmotionListener listener) {
list.add(listener);
}
//产生去玩的事件对象
public void play() {
EmotionObject event = new EmotionObject("打篮球", "喜欢", this);
System.out.println("我是"+name+",今天很开心");
tellAddLintener(event);
}
private void tellAddLintener(EmotionObject event) {
//让监听器监听当前事件,去处理这个事件
for (EmotionListener listener : list) {
listener.doSomething(event);
}
}
}
测试类
package GUI.emotion;
public class EmotionTest {
public static void main(String[] args) {
EmotionSource source1 = new EmotionSource("YJY");
EmotionSource source2 = new EmotionSource("ZFF");
EmotionListener listener = new EmotionListener() {
@Override
public void doSomething(EmotionObject event) {
// TODO Auto-generated method stub
//通过这个事件,获取当前事件源,表示到期是哪个事件产生的事件
EmotionSource source = event.getSource();
System.out.println(source.getName()+"现在正在:"+event.getName()+",原因是:"+event.getDesc());
}
};
source1.addEmontionList(listener);
source2.addEmontionList(listener);
source1.play();
source2.play();
}
}