java监听变量的变化_[Java学习小记]使用PropertyChangeSupport来监听变量的变化
最近开始要着手写一个web项目 ,之前没怎么 写过Java ,所以觉得蛮有必要把每天学习到的一些知识点或者解决的一些问题给记录下来 。一来供自己在整理过程中掌握巩固,二来也为以后再次出现该问题时能快速效率地查阅自己所写的文章,也希望能够对查看本文的读者有些许帮助。平时没怎么写过这种博客,写的不好也请见谅,也希望能够慢慢地锻炼自己这项能力吧。前言就不多说了。
今天要处理的问题是:监听一个变量,当该变量的值出现变化时能够获知,并进行相应处理。
使用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 = new MyClass();
PropertyChangeSupport changes = new PropertyChangeSupport(aclass);
changes.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(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 class MyClass {
private String name = "1";
private String age = "2";
private PropertyChangeSupport changes = new PropertyChangeSupport(this);
public void setName(String name) {
String OldName = this.name;
this.name = name;
changes.firePropertyChange("name", OldName, name);
}
public String getName() {
return name;
}
public void setAge(String age) {
this.age = age;
}
public String getAge() {
return age;
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
changes.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
changes.removePropertyChangeListener(listener);
}
}
然后由该类直接调用
MyClass aclass = new MyClass();
aclass.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(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
至于提到的javabean,以及其四种属性之类的内容,也不是很了解。等了解了再进行补充吧。
java监听变量的变化_[Java学习小记]使用PropertyChangeSupport来监听变量的变化相关推荐
- java 监听 变量_[Java学习小记]使用PropertyChangeSupport来监听变量的变化
今天要处理的问题是:监听一个变量,当该变量的值出现变化时能够获知,并进行相应处理. 使用java.bean.PropertyChangeSupport类.看如下的构造方法,其实就是将你要控制的对象绑定 ...
- amos调节变量怎么画_结构方程模型建模思路及Amos操作--调节变量效果确定(一)(满满都是骚操作)...
2233镇楼~新年第一篇当然是给陪伴吾等死肥宅这么久的B站,新年快乐~新的一年,穷B不买化妆品也要为自己氪大会员...(゜▽゜)つロ po一下天依老婆跨年的歌,烘托新年的气氛[洛天依|周华健]江苏卫视 ...
- java8 监控文件变化_[Java 8] (4) 列举目录下的所有文件和监视文件变化
列举目录中的所有文件 首先给出代码: Files.list(Paths.get(".")).forEach(System.out::println); Files.list方法得到 ...
- Java点击按钮div缩放_[Java教程]怎样给div增加resize事件
[Java教程]怎样给div增加resize事件 0 2016-10-31 11:00:04 当浏览器窗口被调整到一个新的高度或宽度时,就会触发resize事件,这个事件在window上面触发,那么如 ...
- java文件边读边写_[Java教程]node.js 利用流实现读写同步,边读边写
[Java教程]node.js 利用流实现读写同步,边读边写 0 2017-09-10 13:00:14 //10个数 10个字节,每次读4b,写1blet fs=require("fs&q ...
- java做全选反选功能_[Java教程]js实现全选反选
[Java教程]js实现全选反选 0 2017-04-04 00:00:12 在前端中用到全选反选的案例并不少,在这里呢我就实现这个功能给大家参考参考. 这里呢就先贴上我的html和css代码 快递 ...
- java抓取网页标题内容_[Java教程]java 网页页面抓取标题和正文
[Java教程]java 网页页面抓取标题和正文 0 2014-07-10 09:01:30 import java.io.BufferedReader;import java.io.IOExcept ...
- java技术的核心是哪个_[JAVA]《Java 核心技术》(一)
1. unicode编码表 utf-8和unicode的互换问题 2. subString(a,b) 获得 [a,b-1]的子串 3. 易犯错误,java没有引用传递 4. == 比较 ...
- java关于泛型的实验代码_[ Java学习 ] 泛型类的应用实验
成文原因: 这篇文章是我这周所做的 Java 实验题的一个小总结. 这次实验让我深刻赞同了我们 Java 老师在这节实验课前告诉我们的话: 最重要的是把问题想明白,它要怎么拆分成几个类,每个类里究竟需 ...
最新文章
- 三,ES6中需要注意的特性(重要)
- python文件编码与解码_Python读取文件编码解码问题
- wuhan2020新型冠状病毒防疫信息收集平台社区版非正式发布
- oracle中的判断大小,sql语句判断大小
- oc 协议 回调 静态成员_OC问题
- 各种推荐算法的 benchmark
- 为什么都不想去二次开发_为什么现在的一些大学生都不想处理各种人际关系了?...
- 【多任务学习-Multitask Learning概述】
- 修改WordPress网站默认wp-content/uploads上传文件路径
- 写给父亲的语音计算器(‘(‘‘)‘算法参与运算c#,二)
- HC05和电脑蓝牙通讯
- 前端编程中利用PS切图还原设计图
- 通过两个小例子,更快了解-Xms -Xmx
- 雨中的尾巴(线段树合并+树上差分)
- 移动支付技术崛起 多功能集成的趋势
- 小说视频图片站群采集工具程序源码
- 查询快递单号物流,筛选出同一天发出物流的单号
- ABAQUS隧道模拟,新建盾构隧道下穿既有隧道。 包含盾壳,注浆层,注浆压力,衬砌等
- halcon读取图片的4种方法
- EasyNVR无插件流媒体服务器前端技术防止重复提交的方法
热门文章
- 【树莓派】树莓派CSI摄像头安装及测试方法
- 基于MATLAB的自由空间损耗模型的理论与仿真
- Flocking for Multi-Agent Dynamic Systems:Algorithms and Theory
- 我能考虑到的数组(老)方法就这些了(es5)
- iOS中使用OpenGL 实现增高功能
- 使用DeflateStream压缩与解压
- 服务器负载均衡的部署方式
- 变量的存储类别以及作用空间
- 手把手教你在Linux上搭建BitTorrent服务器
- PAT甲级1151 LCA in a Binary Tree (30 分):[C++题解]LCA、最低公共祖先、哈希表映射