PropertyChangeSupport的使用

  • 使用目的

  当你需要监听对象属性的变化时,可以使用PropertyChangeSupport类来管理监听器,可以在一些关联属性的场合使用。

  • 使用示例,以下为BetaConfig对象添加了管理属性监听器的权限  
public class BetaConfig implements Serializable{

    private static final long serialVersionUID = 1L;

    private int serverPort = 8012;
    
    
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
    
    
    public void addPropertyChangeListener(final String propertyName,final PropertyChangeListener listener) {
        changeSupport.addPropertyChangeListener(propertyName, listener);
    }
    
    public void removePropertyChangeListener(final PropertyChangeListener listener) {
        changeSupport.removePropertyChangeListener(listener);
    }
    
    public int getServerPort() {
        return serverPort;
    }
    
    public void setServerPort(int serverPort) {
        //将属性的改变通知给监听,让监听器可以得知此改变
        changeSupport.firePropertyChange("serverPort", this.serverPort, serverPort);
        this.serverPort = serverPort;
    }
}
  • 现在对BetaConfig的serverPort属性监听其变化,用addPropertyChangeListener方法,进行监听添加声明
final BetaConfig config = new BetaConfig();
config.addPropertyChangeListener("serverPort", new PropertyChangeListener() {          
  @Override
  public void propertyChange(PropertyChangeEvent evt) {              
      logger.info("{} {} update to {}",evt.getPropertyName(),evt.getOldValue(),evt.getNewValue());
  }
});

  添加完监听,再执行 config.setServerPort(8000),改变其serverPort的值,监听器的propertyChange方法跟随执行。

转载于:https://www.cnblogs.com/fightingcoding/p/6396283.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Java 中的注解来简化监听器的注册过程。具体来说,可以使用 `@java.beans.PropertyChangeListener` 注解来标记一个方法,使其成为数据更新时的监听器。当数据对象的属性发生变化时,注解标记的方法会自动被触发,执行相应的逻辑。 以下是一个示例代码,演示如何使用注解来实现数据更新时的监听器: ```java import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; public class DataModel { private String data; private PropertyChangeSupport support = new PropertyChangeSupport(this); public void setData(String newData) { String oldData = this.data; this.data = newData; support.firePropertyChange("data", oldData, newData); } public void addPropertyChangeListener(PropertyChangeListener listener) { support.addPropertyChangeListener(listener); } public void removePropertyChangeListener(PropertyChangeListener listener) { support.removePropertyChangeListener(listener); } } public class DataListener { @PropertyChangeListener public void onDataChanged(PropertyChangeEvent evt) { if (evt.getPropertyName().equals("data")) { String newData = (String) evt.getNewValue(); System.out.println("Data updated: " + newData); } } } public class Main { public static void main(String[] args) { DataModel dataModel = new DataModel(); DataListener listener = new DataListener(); dataModel.addPropertyChangeListener(listener); dataModel.setData("Hello, World!"); // Output: Data updated: Hello, World! } } ``` 在上面的代码中,我们创建了一个 `DataModel` 类表示需要监听的数据对象,它使用 `PropertyChangeSupport` 类来管理监听器。在 `setData` 方法中,我们使用 `support.firePropertyChange` 方法触发数据更新事件,同时指定更新前后的数据值。在 `DataListener` 类中,我们使用 `@PropertyChangeListener` 注解标记了一个名为 `onDataChanged` 的方法,用于响应数据更新事件。在 `Main` 类中,我们创建了一个 `DataModel` 对象和一个 `DataListener` 对象,并将监听器添加到数据对象上。当我们调用 `setData` 方法更新数据时,注解标记的方法会自动被触发,输出更新后的数据值。 需要注意的是,使用注解的方式来实现数据更新时的监听器需要满足以下条件: 1. 监听器方法必须使用 `public` 访问修饰符。 2. 监听器方法必须接收一个类型为 `PropertyChangeEvent` 的参数。 3. 监听器方法必须使用 `@java.beans.PropertyChangeListener` 注解标记。 4. 监听器方法的名称可以任意指定,但建议以 `on` 开头,以表明其是一个事件响应方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值