今天要处理的问题是:监听一个变量,当该变量的值出现变化时能够获知,并进行相应处理。

使用java.bean.PropertyChangeSupport类。看如下的构造方法,其实就是将你要控制的对象绑定到该工具中。

PropertyChangeSupport changes = new PropertyChangeSupport(aclass);

使用到如下3种方法:

changes.addPropertyChangeListener(listener);

changes.removePropertyChangeListener(listener);

changes.firePropertyChange("name", null, name);

分别是注册监听器,移除监听器,和触发一个监听事件。其中name就是aclass中一个String属性变量。

MyClass aclass = newMyClass();

PropertyChangeSupport changes= newPropertyChangeSupport(aclass);

changes.addPropertyChangeListener(newPropertyChangeListener() {

@Overridepublic voidpropertyChange(PropertyChangeEvent evt) {//TODO Auto-generated method stub

System.out.println("change");

}

});

String str=aclass.getName();

aclass.setName("11");

changes.firePropertyChange("name", str, aclass.getName());

使用匿名内部类来实现监听器,在propertyChange方法中实现你要的处理。该方法会在firePropertyChange触发了事件之后捕获该事件然后执行。也可以通过implements PropertyChangeListener接口实现。

当bean的属性发生变化时,使用PropertyChangeSupport对象的firePropertyChange方法,它会将一个事件发送给所有已经注册的监听器。该方法有三个参数:属性的名字、旧的值以及新的值。属性的值必须是对象,如果是简单数据类型,则必须进行包装。

注意:如果str 和aclass.getName(),也就是旧值和新值是相同的,不会触发事件。如果将str改为Null,则都会触发事件。

结果:

change

因为一般变量值的变化都是调用了setter方法,所以我们可以在MyClass中直接绑定PropertyChangeSupport对象。然后在需要监听的属性的setter方法中调用firePropertyChange方法,并将添加监听器和移除监听器的方法也由在MyClass中实现。

简单的对MyClass修改如下。

public classMyClass {private String name = "1";private String age = "2";private PropertyChangeSupport changes = new PropertyChangeSupport(this);public voidsetName(String name) {

String OldName= this.name;this.name =name;

changes.firePropertyChange("name", OldName, name);

}publicString getName() {returnname;

}public voidsetAge(String age) {this.age =age;

}publicString getAge() {returnage;

}public voidaddPropertyChangeListener(PropertyChangeListener listener) {

changes.addPropertyChangeListener(listener);

}public voidremovePropertyChangeListener(PropertyChangeListener listener) {

changes.removePropertyChangeListener(listener);

}

}

然后由该类直接调用

MyClass aclass = newMyClass();

aclass.addPropertyChangeListener(newPropertyChangeListener() {

@Overridepublic voidpropertyChange(PropertyChangeEvent evt) {//TODO Auto-generated method stub

System.out.println(evt.getPropertyName());

System.out.println(evt.getOldValue());

System.out.println(evt.getNewValue());

}

});

aclass.setName("new");

输出结果:

name

1

new

可以参考,http://zhangjunhd.blog.51cto.com/113473/36838/

http://www.blogjava.net/fuxueliang/archive/2006/07/18/58738.html

java 监听 变量_[Java学习小记]使用PropertyChangeSupport来监听变量的变化相关推荐

  1. java监听变量的变化_[Java学习小记]使用PropertyChangeSupport来监听变量的变化

    最近开始要着手写一个web项目 ,之前没怎么 写过Java ,所以觉得蛮有必要把每天学习到的一些知识点或者解决的一些问题给记录下来 .一来供自己在整理过程中掌握巩固,二来也为以后再次出现该问题时能快速 ...

  2. java教程孙鑫_[Java基础] 孙鑫老师JAVA无难事视频教程 最适合java入门学习打基础的课程 附源码...

    资源介绍 课程介绍 由孙鑫老师亲自授课录制.内容涵盖面广,从入门到精通,授课通俗易懂,分析问题独到精辟,学员通过本套光盘的学习,能够快速掌握Java编程语言,成为Java高手. 由孙鑫老师亲自授课录制 ...

  3. java静态方法调用非静态变量_[java]静态方法访问非静态方法的方法

    是不是是有点拗口哈,在刚开始的开发中,经常会碰到"无法访问非静态方法",如下: Test.java public Test{ public void notStatic(){ Sy ...

  4. java模拟cpu返回_【学习笔记】模拟Java程序CPU100堆栈追踪

    cpu100排查 这里模拟一下排查过程 连接远程服务器 ssh root@yourServerAddress 编写测试出问题的代码 import java.util.concurrent.TimeUn ...

  5. java实现计算器框架_[Java小程序] 实现简单计算器

    这学期没事学了一点点Java,想写个程序练手,因为只学了一点点,所以暂时只能先写个实现简单功能的计算器练练.感觉写完后不是很好,如果路过的哪位高手给点建议,小弟万分感激啊. 由于期末来了,没太多时间, ...

  6. java 基础面试 英文_[Java面试] 面试java基础总结大全

    原标题:[Java面试] 面试java基础总结大全 基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. ...

  7. JAVA的思维逻辑_[Java教程]计算机程序的思维逻辑

    [Java教程]计算机程序的思维逻辑 0 2016-04-15 20:00:04 程序大概是怎么回事 计算机就是个机器,这个机器主要由CPU.内存.硬盘和输入输出设备组成.计算机上跑着操作系统,如Wi ...

  8. java中的原子操作_[Java并发系列] 2.Java中的原子操作类

    1. 原子操作类的作用 当程序更新一个变量时,如果多个线程同时更新该变量,可能会得到期望以外的值.比如i=1, 线程A更新i+1, 同时线程B更新I+1,经过两个线程的操作,最终变量i的值可能不是3, ...

  9. Java并发编程实战_[Java并发编程实战] 简介

    并发简史 在早期不包含操作系统的计算机中,程序都是单一的串行程序,从头至尾只能执行一个程序,并且这个程序访问这个计算机的所有资源.然而,随着技术的发展,操作系统出现了.它使得计算机程序有了进程,线程的 ...

最新文章

  1. apriori算法c++_使用Apriori进行关联分析
  2. 网络安全与机器学习(二):网络安全任务如何结合机器学习? 1
  3. 互联网1分钟 |1128
  4. 【实例记录】在ubuntu上运行python实现与单片机多线程串口通信
  5. spring aop 声明式事务管理
  6. win7专业版激活方案
  7. bat脚本 - 通过bat脚本一键启动[开机启动]日常应用
  8. matlab计数重叠细胞,医学图像处理案例(三)——用分水岭算法分割重叠细胞
  9. 计算机英语第一张思维导图,英语语法快速入门1-简单句(附思维导图) - 小黑电脑...
  10. 职场打拼小妙招,建议你们收藏使用!
  11. cocos2dx3.16输入框:TextField和EditBox的使用
  12. 关于如何设置网页自动切换背景图片
  13. xp系统 自动锁定计算机,xp如何设置锁屏时间
  14. Linux项目--多人在线聊天系统的开发
  15. 数据仓库数据存储与处理
  16. 12月小红书彩妆、护肤类KOL影响力视频图文排行榜
  17. 遗传算法的python实现(手撕python遗传算法)
  18. vs 番茄助手设置 document method 快捷方法注释
  19. 金猪宝宝--IT人士如何为宝宝起名字
  20. 将.pkl文件转化为.csv

热门文章

  1. 配置HTTPS以与Servlet一起使用
  2. Java命令行界面(第14部分):google-options
  3. threadlocals_如何使用ThreadLocals射击自己
  4. 使用“另类” Cloud Foundry Gradle插件无需停机
  5. apache camel_发掘Apache Camel的力量
  6. MQTT和Java入门
  7. akka与neety_Akka STM –与STM Ref和Agent一起打乒乓球
  8. 为什么现在是升级到Java 8的最佳时机
  9. Java 8 Streams API作为友好的ForkJoinPool外观
  10. Java开发人员应该知道的5种错误跟踪工具