zoukankan      html  css  js  c++  java
  • java PropertyChangeSupport委托帧听类的使用

    要委托的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();
    		}
    	}
    }
    
  • 相关阅读:
    celery
    KeyError: 'pass_ticket'
    Go语言标准库之context
    Go语言标准库之log
    Go语言标准库之time
    Go语言基础之Cookie和Session
    #if...#endif的用法总结
    汇总#pragma用法
    Linux串口编程(转载)
    Linux系统调用(转载)
  • 原文地址:https://www.cnblogs.com/jqy518/p/3349468.html
Copyright © 2011-2022 走看看