您的位置:首页 > 编程语言 > Java开发

java中的事件监听是怎样实现随时监听的

2016-04-20 20:49 375 查看

java中的事件监听是怎样实现随时监听的

标签(空格分隔): Java

参考文献

[1]. http://www.jcodecraeer.com/a/chengxusheji/java/2012/0822/371.html

事件监听机制



  Java中的事件监听是整个Java消息传递的基础和关键。牵涉到三类对象:事件源(Event Source)、事件(Event)、事件监听器(Event Listener)。

  ● 事件源是事件发生的场所,通常就是各个组件,它可以是一个按钮,编辑框等。

  ● 事件监听者负责监听事件源所发生的事件,并对各种事件做出相应的响应。

  ● 事件是描述事件源状态改变的对象。

  具体实现呢,可以看看Button的源码。可能不好看得懂。那好我们仿照侯捷先生的作法,来模拟一个这样的事件传递:

定义一个自己的事件

  将事件源中value的最新值告知监听器

public class MyEvent {
private int value;

public int getValue() {
return value;
}

public void setValue(int value) {
this.value = value;
}
}


做一个监听器接口 Listener

  当外部响应触发事件源上的事件时,产生一个事件对象,该事件对象会作为参数传递给监听器的事件处理方法

public interface Listener {
public void eventChanged(MyEvent e);
}


做一个事件发生者

  ● 当事件源中的value值发生改变时,会促发事件

  ● 监听器在事件源上注册,事件源会保存该监听器,在事件触发时调用监听器的事件处理方法

public class MySource {
private int value;
private Vector<Listener> listeners = new Vector<Listener>();
/**
* 添加监听器
* @param listener
*/
public void addListener(Listener listener){
listeners.add(listener);
}

public void setValue(int value){
this.value = value;
//发送消息
MyEvent e = new MyEvent();
e.setValue(value);
for(int i = 0; i < listeners.size(); i++){
listeners.get(i).eventChanged(e);
}
}

}


定义一个监听器

  如果谁想监听MySource的value值改变了,就在MySource哪儿注册一下,然后写消息处理代码,就可以了,我们定义这样一个监听者:

public class MyListener implements Listener{

@Override
public void eventChanged(MyEvent e) {
// TODO Auto-generated method stub
System.out.println("value changed to:" + e.getValue());
}

}


  这样,当MySource的value真的改变时,就会触发此方法。

注册监听器

  在其他代码中把MyListener注册到MySource:

public class Main {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MySource s = new MySource();
MyListener l = new MyListener();
s.addListener(l);
s.setValue(10);
}

}

#结果
value changed to:10


  Java中AWT/Swing的事件传递的实现,现在版本于上述有所不同,但应该都是这个原理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: