快速业务通道

Java:在Bean中使用PropertyChangeSupport支持PropertyChangeListeners - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18

Java:在Bean中使用PropertyChangeSupport支持PropertyChangeListeners

时间:2011-03-24 51cto博客 zhangjunhd

JavaBean的属性与一般Java程序中所指的属性,或者说与所有 面向对象的程序设计语言中对象的属性是一个概念,在程序中的具 体体现就是类中的变量。在JavaBean的设计中,按照属性的不同作 用又细分为四类:单值属性;索引属性;关联属性;限制属性。

本文主要介绍如何使用PropertyChangeSupport类来支持关联属 性事件的触发。

1.关联属性

关联属性,也称之为绑定属性。绑定属性会在属性值发生变化 时,通知所有相关的监听器。为了实现一个绑定属性,必须实现两 个机制。

1)无论何时,只要属性的值发生变化,该bean必须发送一个 PropertyChange事件给所有已注册的监听器。该变化可能发生在调 用set方法时,或者程序的用户做出某种动作时。

2)为了使感兴趣的监听器能够进行注册,bean必须实现以下两 个方法:

void addPropertyChangeListener (PropertyChangeListener listener); void removePropertyChangeListener(PropertyChangeListener listener);

2.使用PropertyChangeSupport管理监听器

可以通过java.bean包下的PropertyChangeSupport类来管理监 听器。要使用这个类,bean必须有一个此类的数据域。

private PropertyChangeSupport changes = new PropertyChangeSupport(this);

这样就可以将添加和移除监听器的任务交给这个对象。

public void addPropertyChangeListener (PropertyChangeListener listener) {    changes.addPropertyChangeListener(listener); } public void removePropertyChangeListener (PropertyChangeListener listener) {    changes.removePropertyChangeListener(listener); }

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

changes.firePropertyChange("ourString", oldString, newString);

所有注册的监听器实现PropertyChangeListener接口,该接口 中只有一个方法。

public void propertyChange(PropertyChangeEvent e);

当bean的属性值发生变化时,该方法中的代码就会被触发。可 以通过

e.getOldValue();

e.getNewValue();

来得到changes.firePropertyChange("ourString", oldString, newString);中的oldString和newString。

3.为什么要使用PropertyChangeSupport

使用这个类管理监听器的好处是,它是线程安全的。如果使用 一个循环体来set Bean的属性,则这个类可以保证所有监听器执行 触发事件的有序。

还有一个好处是,这个类支持fire带索引的属性改变事件(详 见java.bean.IndexedPropertyChangeEvent)。此时向注册的监听 器发送一个PropertyChangeEvent的方法为:

void fireIndexedPropertyChange(String PropertyName,int index,Object oldValue,Object newValue);

Java:在Bean中使用PropertyChangeSupport支持PropertyChangeListeners(2)

时间:2011-03-24 51cto博客 zhangjunhd

4.示例

MyBoundBean类(具体代码见附件)是一个JavaBean,我们关注它 的唯一一个属性ourString的变化情况,它的初始值是Hello。并通 过PropertyChange类来管理监听器。注意在set方法中会调用 firePropertyChange方法。

MyBoundBean.java import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; public class MyBoundBean {    String ourString = "Hello";    private PropertyChangeSupport

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号