Java:在Bean中使用PropertyChangeSupport支持PropertyChangeListeners 2007-08-03 18:1
来源:互联网 发布:ubuntu 14.04镜像 编辑:程序博客网 时间:2024/06/09 20:00
为早日放下超级菜鸟的荣誉,必须掌握这个。。非常感谢这位大牛,讲得非常清晰,原文有详细demo
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://zhangjunhd.blog.51cto.com/113473/36838
本文主要介绍如何使用PropertyChangeSupport类来支持关联属性事件的触发。
author: ZJ 2007-8-3
Blog: [url]http://zhangjunhd.blog.51cto.com/[/url]
JavaBean的属性与一般Java程序中所指的属性,或者说与所有面向对象的程序设计语言中对象的属性是一个概念,在程序中的具体体现就是类中的变量。在JavaBean的设计中,按照属性的不同作用又细分为四类:单值属性;索引属性;关联属性;限制属性。
本文主要介绍如何使用PropertyChangeSupport类来支持关联属性事件的触发。
1.关联属性
关联属性,也称之为绑定属性。绑定属性会在属性值发生变化时,通知所有相关的监听器。为了实现一个绑定属性,必须实现两个机制。
1) 无论何时,只要属性的值发生变化,该bean必须发送一个PropertyChange事件给所有已注册的监听器。该变化可能发生在调用set方法时,或者程序的用户做出某种动作时。
2) 为了使感兴趣的监听器能够进行注册,bean必须实现以下两个方法:
private PropertyChangeSupport changes = new PropertyChangeSupport(this);
这样就可以将添加和移除监听器的任务交给这个对象。
changes.firePropertyChange("ourString", oldString, newString);
所有注册的监听器实现PropertyChangeListener接口,该接口中只有一个方法。
e.getOldValue();
e.getNewValue();
来得到changes.firePropertyChange("ourString", oldString, newString);中的oldString和newString。
3.为什么要使用PropertyChangeSupport
使用这个类管理监听器的好处是,它是线程安全的。如果使用一个循环体来set Bean的属性,则这个类可以保证所有监听器执行触发事件的有序。
还有一个好处是,这个类支持fire带索引的属性改变事件(详见java.bean.IndexedPropertyChangeEvent)。此时向注册的监听器发送一个PropertyChangeEvent的方法为:
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
public class MyBoundBean {
String ourString = "Hello";
private PropertyChangeSupport changes = new PropertyChangeSupport(this);
public void setString(String newString) {
String oldString = ourString;
ourString = newString;
changes.firePropertyChange("ourString", oldString, newString);
}
public String getString() {
return ourString;
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
changes.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
changes.removePropertyChangeListener(listener);
}
}
MyCallBound1类(具体代码见附件)是它的一个监听器。整个动作是这样的,点击jButton1或jButton2会触发Button的action事件,将jButton1的test设置为文本框中的内容,同时,目标bean的ourString属性的内容也会设置为文本框中的内容。
public void propertyChange(PropertyChangeEvent e) {
if (e.getSource() == b) {
textBox.setText(e.getOldValue().toString());
jButton2.setText(e.getNewValue().toString());
}
}
如果不实现PropertyChangeListener接口的话,可以使用匿名内部类来达到同样的效果。(具体代码见附件MyCallBound2.java)
void ourString_propertyChange(PropertyChangeEvent e) {
if (e.getSource() == b) {
textBox.setText(e.getOldValue().toString());
jButton2.setText(e.getNewValue().toString());
}
}
- Java:在Bean中使用PropertyChangeSupport支持PropertyChangeListeners 2007-08-03 18:1
- Java:在Bean中使用PropertyChangeSupport支持PropertyChangeListeners
- Bean中PropertyChangeSupport的使用
- 源组件(bean)的属性改变支持PropertyChangeSupport和属性改变监听PropertyChangeListener
- [Java学习小记]使用PropertyChangeSupport来监听变量的变化
- PropertyChangeSupport的使用
- Java 设计模式 PropertyChangeSupport
- java PropertyChangeSupport类详解
- 使用PropertyChangeSupport/PropertyChangeListener监控变量
- 使用PropertyChangeSupport监听变量变化
- 在项目jsp文件中使用bean
- 在JSF中整合使用Spring Bean
- Spring--在Bean定义中使用EL
- 在Bean类中使用Spring容器
- 在 Jelly Bean 中使用应用加密
- Spring在JAVA中获取bean
- java 如何在listener(监听器) 中使用Spring容器管理bean
- HttpServlet 中使用JAVA BEAN 自省机制
- 飘逸的python - 对字典diff("异或")
- Eclipse的SVN插件与本地客户端关联不上如何解决
- 结构体数组初始化
- c语言字符串函数的实现
- 解决VS2010在程序根目录生成ipch文件夹和.sdf格式文件问题
- Java:在Bean中使用PropertyChangeSupport支持PropertyChangeListeners 2007-08-03 18:1
- Java多线程——5 阻塞型同步、非阻塞型同步和Lock-Free
- 【HDOJ】1163 -> Eddy's digital Roots
- 归纳总结之银行业务调度系统
- HDOJ 1203
- 自己写的螺旋矩阵,面试的真心求收藏
- Linux c 基于socket文件的进程通信—对等模型
- ALIGN size as align
- 最长递增子序列(LIS)