前言
之前在项目中,有一个需求,就是给一个percent变量添加监听器用来做进度条,在网上找了很长时间的教程,发现了很多教程讲的并不是很详细,总是感觉看得很模糊。现在我项目完成了,我把我的经验给大家分享一下。
EventListener
EventListener是一个监听器的基类,在java中,事件监听器都需要继承于它,我们要做的就是写一个继承与他的子接口。
package Listener;
import Event.PercentEvent;
import java.util.EventListener;
/**
* @Author: zhangjun
* @Description: 比例变化执行的监听器
* @Date: Create in 18:38 2020/4/30
*/
public interface PercentListener extends EventListener {
/**
* 事件变化后执行的方法,自己定义的
* @param dm
*/
public void updateEvent(PercentEvent dm);
}
EventObject
上面是创建了一个事件的监听器,这里就是要创建一个事件的模型,也就是事件的实体。我们要做的就是继承这个类。
package Event;
import java.util.EventObject;
/**
* @Author: zhangjun
* @Description: 比例变化的事件实体
* 每次我监听的对象(testListenerExecuter )改变的时候,都会把他的改变传递给我(PercentEvent ),我在把改变传递给需要这个改变的地方(run类)。
* @Date: Create in 17:39 2020/4/30
*/
public class PercentEvent extends EventObject {
private Object source;
private int percent;
/**
* 构造方法
* @param source 监听的对象
* @param percent 监听的变量
*/
public PercentEvent(Object source, int percent) {
super(source);
this.source=source;
this.percent=percent;
}
public int getPercent(){
return percent;
}
}
事件改变类
这个我也不知道该怎么形容他,反正你就理解成你需要监听的那个类吧,我这里模拟创建了一个类
package ExecuteTest;
import Event.PercentEvent;
import Listener.PercentListener;
/**
* 测试监听器的执行
*/
public class testListenerExecuter {
PercentListener percentListener;
public int percent=0;
public void addPercentListener(PercentListener percentListener){
this.percentListener=percentListener;
}
public void innerExcuter(){
for (int i=0;i<100;i++){
percent=i;
System.out.println("我是percent 我改变成了="+percent);
//这一步必须在改变事件中加入对percent的监听 updateEvent是变量改变之后的执行事件
//这个event里面也不是非要监听percent,你也可以监听其他变量
percentListener.updateEvent(new PercentEvent(this,percent));
}
}
}
执行
package ExecuteTest;
import Event.PercentEvent;
import Listener.PercentListener;
public class run {
public static void main(String[] grgs){
testListenerExecuter test= new testListenerExecuter();
PercentListener listener = new PercentListener() {
@Override
public void updateEvent(PercentEvent dm) {
// System.out.println("我是获取到事件改变之后的执行的方法");
System.out.println("我知道percent改变为="+dm.getPercent());
}
};
//将监听器添加给该变量
test.addPercentListener(listener);
test.innerExcuter();
}
}
效果
总结
初学者光看代码有时候并不会很快的理解这里面的含义,虽然有点点绕,但是只有你在你的demo工程中创建这四个类,测试几次,看个三五分钟,就能明白其中的含义。祝学习愉快。
demo项目的下载
链接:https://pan.baidu.com/s/1G5bXBCAQ_lNl11qJudQ36w
提取码:wk8s