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

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

使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

处理异常功能样式

Java从一开始就支持检查异常。 在Java 8中,语言元素lambda和支持流操作的RT库修改将功能编程风格引入了该语言。 函数样式和异常并不是真正的好朋友。 在本文中,我将描述一个简单的库,该库在某种程度上类似于使用Optional处理null方式处理异常…

C语言项目:灰度处理技术

Hello,今天给大家带来的是一个比较简单的图形处理技术-灰度处理技术。那么到底什么是灰度处理技术呢?简单来说,所谓的灰度处理技术就是把一张彩色的图片变成一张灰色的图片。如下图所示,左边是原图,右边则是已经被处理…

java 设置文本颜色_在Java中更改文本的颜色

添加到我的评论:1)您不应该通过调用paintComponent(..)方法的super.XXX实现来尊重paint链,它应该是覆盖方法中的第一个调用,否则可能发生异常:Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);Font font new Font("S…

C语言项目:推箱子大战

还记得大家小时候玩过的游戏吗?曾经的坦克大战、推箱子、贪吃蛇都是我们以前玩过的小游戏,然而现在随着大型单机、网络游戏的光芒照耀下,那些曾经的小游戏都渐渐消失了,也或许是我们都已经长大了吧。那么今天,我给大家…

在Spring@Component vs @Repository vs @Service

介绍: 借助Spring的自动扫描功能,它可以自动检测我们的应用程序中定义的各种bean。 我们通常使用可用的Spring注释之一来注释我们的bean- Component, Repository, Service, Controller 。 在检测到bean时,…

java项目加减乘除验证码_课堂Java小程序(加减乘除与验证码)

一、编写一个程序,用户输入两个数,求出其加减乘除,并用消息框显示计算结果。1.设计思想:从键盘输入两个数字和运算符,然后计算。将输入的数字及运算符由字符型转换为整型,再用if判断输入的运算符&#xff0…

C语言绘图:可爱叮当猫

大家对于叮当猫可以说是很熟悉了吧,他还有另外一个名字,也就是哆啦a梦。即便你没有看过他的电影动画,也总会听说过的。叮当猫神奇的口袋总是能够掏出我们幻想功能的任何道具,任意门能够带我们去到任何地方,以及插在头上…

jgit git pull_使用JGit API探索Git内部

jgit git pull您是否想过提交及​​其内容如何存储在Git中? 好吧,我有,在上一个下雨的周末我有一些空闲时间,所以我做了一些研究。 因为我对Java的感觉比对Bash的感觉要多,所以我使用JGit和一些学习测试来探究提交的G…

MFC实现Windows锁屏

编辑Windows锁屏锁屏软件相信大家都见过,以前我去网吧上网的时候也用过这个功能,当你有事情需要立即离开,而又不想让别人碰你的电脑,就需要用扫锁屏软件啦,锁住屏幕之后等回来的时候再输入密码解锁。同样的&#xff0c…

pdf 截图 java_java实现pdf文件截图的方法【附PDFRenderer.jar下载】

本文实例讲述了java实现pdf文件截图的方法。分享给大家供大家参考,具体如下:最近做的一个网站中,有个需求是上传pdf文件,显示pdf的封页,点击封页之后进行在线阅读,这里使用的是PDFRender对pdf进行截图。pub…

检查Java测试中发生了什么

有人想到了在Java单元测试中使用try和catch块的想法: Test public void test() { try { callSomeCode(); } catch (Exception e) { assertEquals( "foo" , e.getMessage()); } } 上面的内容很诱人,但不起作用 。 如果被测代码没有抛出&…

学习红客技术必备

互联网时代已悄悄来临,作为新时代的人们,我们日常生活、工作、学习方面都需要借助互联网来完成,这样,又产生一种新的问题,那就是网络安全的问题,有时我们拼命加班好不容易完成的东西,在一夜之间…

md5withrsa java_浏览器运行java插件报错:Algorithm constraints check failed: MD5withRSA

今天使用kvm管理机房机器的时候发现一只连不上,报以下错误:sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Algorithm constraints check failed: MD5withRSA我确认我已经把…

jpa 实体映射视图_JPA教程:实体映射-第3部分

jpa 实体映射视图在上一篇文章中,我展示了两种读取/写入持久实体状态的不同方法-字段和属性。 使用字段访问模式时,JPA使用反射直接从实体的字段读取状态值。 如果我们没有明确指定列名,它将直接将字段名转换为数据库列名。 在属性访问模式下…

今晚课题:2019-3-20

今晚课题C/C万年历技术实现原理上课时间:20:30--22:30上课老师:杰越教育-Larry老师上课地址:https://ke.qq.com/course/353889 课程内容:1、C/Cfor逻辑原理2、重要点数据结构分析3、万年历效果实现展示赢在别人休息时,…

python在材料模拟中的应用_材料模拟python_模拟-python模拟-在不妨碍实现的情况下修补方法...

此答案解决了Quuxplusone用户提供的赏金中提到的其他要求:对于我的用例而言,重要的是它可以与MagicMock一起使用,即,它不需要我在构造Potato(在此示例中为spud)实例与调用spud.foo(在本例中)之间插入任何代码。我需要293984865472…

新版本的Selenium 4 Alpha会有什么期望?

我们所有人都属于测试领域,他们熟悉Selenium,Selenium是业界最流行的开源自动化工具之一。 Selenium的创始成员Simon Stewart在2018年8月正式宣布Selenium 4的发布日期以及它将为用户带来哪些新功能时,我们感到非常兴奋。 与Selenium 3一样&…

今晚课题:2019-3-22

今晚课题数据结构必会重点集合上课时间:20:30--22:30上课老师:杰越教育-Larry老师上课地址:https://ke.qq.com/course/353889 课程内容:1、C/C技术工作运用2、数据结构重点数组定义特点3、工作项目数组合理使用赢在别人休息时&…

java 单例 实现_java 实现单例的各种方式

概述上一篇日志中,我们介绍了单例模式的概念和基础的应用本节中,我们就来介绍一下 java 语言中如何编写单例模式类只适合单线程环境的单例模式public class Singleton {private static Singleton instance null;private Singleton() { }public static S…

Drools DMN最新开源引擎性能改进

我们一直在寻求改善Drools DMN开源引擎的性能。 我们最近审查了DMN用例,其中输入数据节点的实际输入总体有所不同。 这突出显示了引擎的次佳性能,我们在最新版本中对此进行了改进。 我想分享我们的发现! 基准制定 当我们开始为该用例运行一个…