java的PropertyChangeListener
来源:互联网 发布:炉石传输数据遇到问题 编辑:程序博客网 时间:2024/05/21 04:19
看源码时,看到用这个属性改变的监听,顺便学习下。
相关的类都在java.beans包。
在JavaBean的设计中,按照属性的不同又细分为四类:
单值属性、索引属性、关联属性、限制属性
这里主要介绍如何使用PropertyChangeSupport类来支持关联属性事件的触发。
1、关联属性
关联属性,也称之为绑定属性.绑定属性在属性发生变化时,会通知相关的监听器.为了通知相关的监听器,
为了实现一个绑定属性,必须实现两个机制。
1) 无论何时,只要属性的值发生变化,该bean必须发送一个PropertyChange事件给所有已注册的监听器。该变化可能发生在调用set方法时,或者程序的用户做出某种动作时。
2) 为了使感兴趣的监听器能够进行注册,bean必须实现以下两个方法:
void addPropertyChangeListene
void removePropertyChangeList
2.使用PropertyChangeSupport
可以通过java.bean包下的PropertyChangeSupport类来管理监听器。要使用这个类,bean必须有一个此类的数据域。
private PropertyChangeSupport changes = new PropertyChangeSupport(this);
这样就可以将添加和移除监听器的任务交给这个对象。
public void addPropertyChangeListene
changes.addPropertyChangeListene
}
public void removePropertyChangeList
changes.removePropertyChangeList
}
当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.IndexedPropertyChangeEve
void fireIndexedPropertyChang
package com.study.propertychangelistener;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.beans.PropertyChangeSupport;public class DemoBeans {private String demoName;PropertyChangeSupport listeners = new PropertyChangeSupport(this);public DemoBeans() {demoName = "initValue";}public void setDemoName(String demoName) {String oldValue = this.demoName;this.demoName = demoName;firePropertyChange("demoName", oldValue, demoName);}public void addPropertyChangeListener(PropertyChangeListener listener) {listeners.addPropertyChangeListener(listener);}public void removePropertyChangeListener(PropertyChangeListener listener) {listeners.removePropertyChangeListener(listener);}private void firePropertyChange(String prop, String oldValue,String newValue) {//报告已注册监听器的绑定更新listeners.firePropertyChange(prop, oldValue, newValue);}public static void Main(String[] args) {DemoBeans bean = new DemoBeans();bean.addPropertyChangeListener(new PropertyChangeListener() {@Overridepublic void propertyChange(PropertyChangeEvent evt) {System.out.println("OldValue :" + evt.getOldValue());System.out.println("NewValue :" + evt.getNewValue());System.out.println("NewValue :" + evt.getPropertyName());}});}}
- java的PropertyChangeListener
- java propertyChangeListener 观察者模式的实现
- 关于JavaBean的PropertyChangeListener
- PropertyChangeListener
- PropertyChangeListener
- Java PropertyChangeListener实现对象属性监听
- JavaBeans的PropertyChangeListener系列类用法
- PropertyChangeListener关联属性的简单介绍
- 源组件(bean)的属性改变支持PropertyChangeSupport和属性改变监听PropertyChangeListener
- PropertyChangeListener接口使用初探
- PropertyChangeListener接口使用初探
- PropertyChangeListener接口使用初探
- 使用PropertyChangeSupport/PropertyChangeListener监控变量
- 【Java】Java的多态性
- 【Java】java的多线程
- java的
- 动态的Java (Dynamic Java)
- java 完整的SwingUtil.java
- Android MediaPlayer使用方法简单介绍
- 使用pull解析器操作xml文件
- ASP.NET中26个常用性能优化方法
- JDBC读出blob
- archlinux无法联网解决方法
- java的PropertyChangeListener
- ASP.NET操作XML
- Code First Entity Framework基本与最佳添加(add/create),删除(delete/remove),修改(update/modify)操作
- C#数组学习实例
- 三种SQL分页法
- fedora 17 安装 skyeye1.3.5
- C#模拟http 发送post或get请求
- C# POST模拟登录发贴
- Keil 使用 Jlink 进行调试出现错误: No Algorithm found for: 08000000H - 08001557H错误的解决