超详细java给某一个变量自定义监听器

5 篇文章 0 订阅
1 篇文章 0 订阅

前言

之前在项目中,有一个需求,就是给一个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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值