javaBean属性监听机制

说明:共有3个Java类
package com.a;
/**
<p>Title:属性监听 </p>

<p>Description: </p>

<p>Copyright: Copyright (c) 2009</p>

<p>Company: </p>

@author
@version 1.0

*/
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;

/**
* 这是一个实用工具类,支持绑定 (bound) 属性的 bean 可以使用该类。
* 可以使用此类的实例作为 bean 的成员字段,并将各种工作委托给它。 此类是可序列化的。
* 在对它进行序列化时,它将保存(并恢复)本身可序列化的所有侦听器。在序列化期间,将跳过所有不可序列化的侦听器。
* @author Administrator
*
*/
public class PropertyChangeSupportTest {

// 临时的属性变量,为了侦听属性值的变化,该值的状态不再存储,每次的应用都是起初的状态,即変元
transient protected PropertyChangeSupport listeners = new PropertyChangeSupport(this);
/**
* 向侦听器列表添加一个 PropertyChangeListener
* @param listener 侦听器
*/
public void addPropertyChangeListener(PropertyChangeListener listener)
{
if(listener == null)
{
throw new IllegalArgumentException();
}
listeners.addPropertyChangeListener(listener);
}
/**
* 通知所有已注册侦听器的绑定属性更新,如果属性值发生改变,就会触发PropertyChangeEvent事件
* @param prop 被更改属性的属性名称
* @param old 属性的旧值
* @param newValue 属性的新值
*/
public void firePropertyChangeListener(String prop,Object old,Object newValue)
{
listeners.firePropertyChange(prop, old, newValue);
}
/**
* 从侦听器列表移除一个为所有属性注册的 PropertyChangeListener
* 如果将 listener 多次添加到同一事件源,则在被移除之后,它至少将被通知一次
* @param listener 侦听器
*/
public void removePropertyChangeListener(PropertyChangeListener listener)
{
listeners.removePropertyChangeListener(listener);
}
}//end class

**********************************************************
**********************************************************
package com.a;

import java.rmi.Remote;
/**
<p>Title:属性监听 </p>

<p>Description: </p>

<p>Copyright: Copyright (c) 2009</p>

<p>Company: </p>

@author
@version 1.0

*/
public class BeanTest extends PropertyChangeSupportTest {

// 此静态属性是提供侦听的属性名的,其值与下面的属性名一致
public static final String TEST = "name";
// 定义私有的侦听属性
private static String name =" null,null,null,null,null,null,null,null";

// private String age ="0";

public String getName() {

return this.name;
}

public void setName(String name) {
// 属性值未发生改变时,if判断在此仅打印出一条提示语句,返回程序控制权
if(this.name.equals(name))
{
// System.out.println(this.name);
// System.out.println(name);
System.out.println("BeanTest的属性name没有变化");
// 程序的控制流程到此结束,不再执行下面的代码
return;
}
// 此方法只有在属性值改变后触发,为注册的监听器激发一个PropertyChangeEvent事件
// 如果给定事件的旧值和新值相等并且都是非 null 的,则不会激发事件
this.firePropertyChangeListener(this.TEST, this.getName(), name);

// 这句可以说明点火方法不会修改属性值,实际在propertyChange()方法执行后也是一样的
// System.out.println("fire与propertyChange方法后的值为:"+this.getName());
// 这句才把新值传了过去,修改了属性值,此句应在调用fire方法后执行
this.name = name;
// System.out.println(this.name);
// this.firePropertyChangeListener(this.name, null, name);
}

// public String getAge() {
// return age;
// }
//
// public void setAge(String age) {
// if(this.age.equals(age))
// {
// System.out.println("BeanTest的属性age没有改变");
// return;
// }
// this.firePropertyChangeListener("age", this.getAge(), age);
//
// this.age = age;
// }



}//end class

************************************************************
************************************************************
package com.a;
/**
<p>Title:属性监听 </p>

<p>Description: </p>

<p>Copyright: Copyright (c) 2009</p>

<p>Company: </p>

@author
@version 1.0

*/
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import com.byh.pubsub.JMSpubsub;
/**
* listeners接口的方法propertyChange(PropertyChangeEvent evt)可以获得在属性值发生变化时
* 所激发的propertyChange的事件通知,及对此事件的处理
* 该类实现了PropertyChangeListener接口后就是一个PropertyChangeListener实体类
*/
public class BeanTestListener implements PropertyChangeListener {

/**
* 实现接口的方法,获得监听的事件源,在firePropertyChangeListener方法调用后执行该方法
* evt 是描述事件源
*/
// 8.1改变
// private String cto;
public void propertyChange(PropertyChangeEvent evt) {

// 调试
// System.out.println(BeanTest.TEST);

// getPropertyName()方法获取已更改属性的编程名称,返回被更改属性的编程名称。如果多个属性被更改,则返回 null
if(evt.getPropertyName().equals(BeanTest.TEST))
{
// 调试,此处方法的执行也不会改变侦听的属性值
// System.out.println("侦听时的值为:"+test.getName());
// 返回的被更改的属性名是空字符串为真时
// System.out.println("BeanTest的属性name改变");

}
// 测试age
// if(evt.getPropertyName().equals("age"))
// {
// System.out.println("BeanTest的属性age改变");
// }
// 调试
// System.out.println(evt.getPropertyName().equals(test.getName()));
System.out.println("侦听得到的发生变化的属性名:"+evt.getPropertyName()+"新值:"+evt.getNewValue()+" "+"旧值:"+evt.getOldValue());
//这里可以写当Bean得属性变化后的处理代码

}
/**
* main方法
*/
// public static void main(String args[])
// {
// 实例化bean
// BeanTest test = new BeanTest();
// 实例化BeanTestListener
// BeanTestListener lis = new BeanTestListener();
// 调用bean继承父类的方法,为该类所有属性注册一个监听器
// test.addPropertyChangeListener(lis);
// set方法中包含firePropertyChangeListener()方法
// test.setName("2");
test.setName("600000.SS,25.30,25.13,25.39,24.79,68261672");
// test.setName("test3");
// 测试age属性
// test.setAge("1");
// 调用bean继承父类的方法,为该类所有属性注册的监听器移除,
// test.removePropertyChangeListener(lis);

// test.setName("test9");
// 打印出test中name的属性
// System.out.println("最新的name值:"+test.getName());
// 打印出test中age的属性
// System.out.println("最新的age值:"+test.getAge());

// }
// public String getCto() {
// return cto;
// }
// public void setCto(String cto) {
// this.cto = cto;
// }

}//end class
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值