ITperson

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

要委托的Bean类写法。

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.Date;

public class StudentBean {
	private String name;
	private int age;
	private Date birthday;
	
	//创建委托。
	private PropertyChangeSupport pcs = new PropertyChangeSupport(this);

	public StudentBean() {

	}

	public StudentBean(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		String oldvalue = this.name;
		this.name = name;
		//激发帧听器。
		pcs.firePropertyChange("name", oldvalue, this.name);
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
	//加入帧听方法。
	public void addPropertyChangeListener(PropertyChangeListener listener)
	{
		pcs.addPropertyChangeListener(listener);
	}
	//加入移除帧听方法。
	public void removePropertyChangeListener(PropertyChangeListener listener)
	{
		pcs.removePropertyChangeListener(listener);
	}
}

 测试代码:

import java.beans.IntrospectionException;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;


public class IntrospectorTest {
	public static void main(String[] args) 
	{
		try{
		Class st = Class.forName("StudentBean");
		Constructor<StudentBean> cct = st.getConstructor(null);
		StudentBean sbean = cct.newInstance();
		//注册帧听器。
		sbean.addPropertyChangeListener(new PropertyChangeListener(){

			@Override
			public void propertyChange(PropertyChangeEvent evt) {
				System.out.println(evt.getPropertyName()+":"+evt.getOldValue()+":"
						+evt.getNewValue());				
			}		 
		 } );
		//内省获取Bean字段描述。
		PropertyDescriptor pd = new PropertyDescriptor("name", StudentBean.class);
		//开启对该字段的帧听。
		pd.setBound(true);
		Method namgget = pd.getWriteMethod();
		namgget.invoke(sbean, "wangwu");
		System.out.println(sbean.getName());
		}catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}

 

posted on 2013-10-02 17:03  ITperson  阅读(308)  评论(0编辑  收藏  举报