JavaBeans的PropertyChangeListener系列类用法

类图如下:

类图


顺序图如下:

顺序图


示例代码如下:

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


public final class PropertyChanger
{
   public PropertyChanger()
   {
      // TODO Auto-generated constructor stub
      pcs = new PropertyChangeSupport(this);
      pcs.addPropertyChangeListener(new UnnamedPropertyChangeListener(this));
      pcs.addPropertyChangeListener("name", new PropertyChangeListenerWithName(this));
   }

   /**
    * @param args
    */
   public static void main(String[] args)
   {
      // TODO Auto-generated method stub
      PropertyChanger pc = new PropertyChanger();
      pc.run();
   }

   public void run()
   {
      setName("virus");
      setId(1);
   }

   public String getName()
   {
      return name;
   }

   public void setName(String name)
   {
      String oldName = this.name;
      this.name = name;
      pcs.firePropertyChange("name", oldName, name);
   }

   public int getId()
   {
      return id;
   }

   public void setId(int id)
   {
      int oldId = this.id;
      this.id = id;
      pcs.firePropertyChange("id", oldId, id);
   }

   private PropertyChangeSupport pcs;

   private String name = "world";
   private int id = 0;

}

class UnnamedPropertyChangeListener implements PropertyChangeListener
{
   /**
    * @param changer
    */
   public UnnamedPropertyChangeListener(PropertyChanger changer)
   {
      super();
      this.changer = changer;
   }

   @Override
   public void propertyChange(PropertyChangeEvent evt)
   {
      // TODO Auto-generated method stub
      if (evt.getSource() == changer)
      {
         if (evt.getPropertyName().equals("name") || evt.getPropertyName().equals("id"))
         {
            System.out.println("My new " + evt.getPropertyName() + " is: " + evt.getNewValue() + ".");
         }
         else
         {
            System.out.println("Unlnown property.");
         }
      }
   }

   private PropertyChanger changer;

}

class PropertyChangeListenerWithName implements PropertyChangeListener
{

   /**
    * @param changer
    */
   public PropertyChangeListenerWithName(PropertyChanger changer)
   {
      super();
      this.changer = changer;
   }

   @Override
   public void propertyChange(PropertyChangeEvent evt)
   {
      // TODO Auto-generated method stub
      if (evt.getSource() == changer)
      {
         if (evt.getPropertyName().equals(propName))
         {
            System.out.println("Hello, " + evt.getNewValue() + " !");
         }
         else
         {
            System.out.println("Unlnown property.");
         }
      }
   }

   private PropertyChanger changer;

   private final String propName = "name";

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值