今天要说的是java提供的一个功能 属性监听,最重要的就是PropertyChangeListener,接下来将通过实例来展示其功能和使用方式 一、PropertyChangeListener PropertyChangeListener You can register a PropertyChangeListener with a source * bean so as to be notified of any bound property updates. */ public interface PropertyChangeListener extends java.util.EventListener { /** com.typhoon.spring_jdbctemplate.listener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener 总结 其实这是java中一种典型的观察者模式,通过为业务类注册监听器,在业务类实例属性发生变化的时候触发监听器来完成其他业务;任何一个存在的事物都有有弊有利,使用PropertyChangeListener
oldValue.equals(newValue)) { String name = event.getPropertyName(); PropertyChangeListener [] common = this.map.get(null); PropertyChangeListener[] named = (name ! event); fire(named, event); } } //实际在监听器中改变事件 private static void fire(PropertyChangeListener = null) { for (PropertyChangeListener listener : listeners) { listener.propertyChange (event); } } } 然后一查 PropertyChangeListener 是一个接口,有好多好多的实现类 , 然后我就不知道怎么查了 其实从那四个参数的意思上面看也能看出个大概
可能会引发与Java.beans.VetoableChangeSupport相关的报错: import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener propertyChangeSupport.addPropertyChangeListener(listener); } public void removePropertyChangeListener(PropertyChangeListener vetoableChangeSupport.removeVetoableChangeListener(listener); } } class MyListener implements PropertyChangeListener 2.4 方法四:使用线程安全的集合 如果在程序中使用了集合来存储VetoableChangeListener或PropertyChangeListener,要确保使用线程安全的集合类。 VetoableChangeListener> vetoableChangeListeners = new CopyOnWriteArrayList<>(); private CopyOnWriteArrayList<PropertyChangeListener
PropertyChangeSupport support=new PropertyChangeSupport(this); public void addPropertyChangeListener(PropertyChangeListener support.addPropertyChangeListener(listener); } public void removePropertyChangeListener(PropertyChangeListener dateDateBeanObserveValue, null, null); 完整示例代码 TestComputedValue2 .java package testwb; import java.beans.PropertyChangeListener PropertyChangeSupport support=new PropertyChangeSupport(this); public void addPropertyChangeListener(PropertyChangeListener support.addPropertyChangeListener(listener); } public void removePropertyChangeListener(PropertyChangeListener
PropertyChangeSupport listeners = new PropertyChangeSupport(this); public void addPropertyChangeListener(PropertyChangeListener listeners.firePropertyChange(propName, oldValue, newValue); } public void removePropertyChangeListener(PropertyChangeListener 这里监听者需要实现PropertyChangeListener接口,并在适合的时机添加到监听队列中,由于这部分的代码在Editpart中,GEF的每一个Editpart都对应了一个Model,因此通过简单的 添加完监听队列,需要实现一下PropertyChangeListener里面的PropertyChange方法,这个方法传递一个参数,通过这个参数可以获取上面最开始设定的字符串,从而判断是模型的哪个时间发生了响应
org.eclipse.swt.widgets.Shell; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Text; import java.beans.PropertyChangeListener changeSupport = new PropertyChangeSupport(this); public void addPropertyChangeListener(PropertyChangeListener changeSupport.addPropertyChangeListener(listener); } public void removePropertyChangeListener(PropertyChangeListener
date 2017-09-17 13:54 Sunday * @since V2.0 */ public class HABalanceSimpleJdbcOperations implements PropertyChangeListener 新作成一个Task task = new HABalanceJdbcHealthCheckTask(this.crmB_N_JdbcList); // add PropertyChangeListener * * @param listener */ public void addPropertyChangeListener(PropertyChangeListener listener) { this.listeners.addPropertyChangeListener(listener); } /** * 移除 健康值PropertyChangeListener * * @param listener */ public void removePropertyChangeListener(PropertyChangeListener listener) {
PropertyChangeEvent类继承于EventObject,新增了一些定制化属性,属性名、老的值和新的值 PropertyChangeListener也是一个接口,继承于EventListener ,提供了属性变更相关操作的抽象,提供了承载监听器的容器 1.实现 新建监听器: @Slf4j public class SimplePropertyChangeListener implements PropertyChangeListener oldValue.equals(newValue)) { String name = event.getPropertyName(); PropertyChangeListener [] common = this.map.get(null); PropertyChangeListener[] named = (name ! = null) { for (PropertyChangeListener listener : listeners) { listener.propertyChange
. */ void addPropertyChangeListener(PropertyChangeListener listener); /** * Remove listener The PropertyChange listener to be removed. */ void removePropertyChangeListener(PropertyChangeListener
PropertyChangeEvent类继承于EventObject,新增了一些定制化属性,属性名、老的值和新的值 PropertyChangeListener也是一个接口,继承于EventListener 提供了属性变更相关操作的抽象,提供了承载监听器的容器 1.实现 新建监听器: @Slf4j public class SimplePropertyChangeListener implements PropertyChangeListener oldValue.equals(newValue)) { String name = event.getPropertyName(); PropertyChangeListener [] common = this.map.get(null); PropertyChangeListener[] named = (name ! = null) { for (PropertyChangeListener listener : listeners) { listener.propertyChange
Listing 7.1: The Logger interface 清单 7.1:日志记录器接口 package org.apache.catalina; import java.beans.PropertyChangeListener public void setVerbosity(int verbosity); public void addPropertyChangeListener(PropertyChangeListener String message, Throwable throwable, int verbosity); public void removePropertyChangeListener(PropertyChangeListener provides the addPropertyChangeListener and removePropertyChangeListener methods to add and remove a PropertyChangeListener 它还提供了 addPropertyChangeListener 和 removePropertyChangeListener 方法,用于添加和移除 PropertyChangeListener。
java.util.Comparator java.io.FileFilter java.nio.file.PathMatcher java.lang.reflect.InvocationHandler java.beans.PropertyChangeListener
//改变被观察者的状态 subject.setState(1); } } JDK自带 java9中已经过时 替代方法:使用PropertyChangeEvent,PropertyChangeListener 通知顺序跟注册顺序相反 subject.addObserver(new ConcreteObserver()); subject.changeState(1); } } 使用PropertyChangeListener * * 观察者 * @author jujun chen * @date 2020/07/26 */ public class DeviceChangeListener implements PropertyChangeListener PropertyChangeSupport(this); private int state; //增加监听 public void addPropertyChangeListener(PropertyChangeListener changeSupport.addPropertyChangeListener(listener); } //移除监听 public void removePropertyChangeListener(PropertyChangeListener
当属性编辑器更改其值时, 它应在所有已注册的 PropertyChangeListener 上触发 PropertyChangeEvent,将属性名称和自身指定为空值作为源。 */ void addPropertyChangeListener(PropertyChangeListener listener); void removePropertyChangeListener text); } public synchronized void addPropertyChangeListener( PropertyChangeListener ; } public synchronized void removePropertyChangeListener( PropertyChangeListener null, null); //将发生的事件告知所有的监听器 for (int i = 0; i < targets.size(); i++) { PropertyChangeListener
not found: " + writeMethodName); } // If this class or one of its base classes allow PropertyChangeListener Class[] args = { PropertyChangeListener.class }; this.bound = null !
not found: " + writeMethodName); } // If this class or one of its base classes allow PropertyChangeListener Class[] args = { PropertyChangeListener.class }; this.bound = null !
虚拟机实例 java 有一对标准的类允许我们这样做——java.beans.PropertyChangeSupport 和 java.beans.PropertyChangeListener。 PropertyChangeListener 是一个接口,我们的代码可以实现该接口以接收已发生的任何更改: PropertyChangeSupport observable = new PropertyChangeSupport
privatefinal Map<String, Object> runtimeData = new ConcurrentHashMap<>(); privatefinal Map<String, List<PropertyChangeListener /** * 注册属性变更监听器 */ public void addPropertyChangeListener(String identifier, PropertyChangeListener private void firePropertyChange(String identifier, Object oldValue, Object newValue) { List<PropertyChangeListener = null) { for (PropertyChangeListener listener : listeners) { try { } } } } // 内部接口定义 @FunctionalInterface publicinterface PropertyChangeListener
在Java Beans中,属性的更改可以被监听器(PropertyChangeListener)监听,而某些属性还可能受到约束(VetoableChangeListener)。
val changeSupport = PropertyChangeSupport(this) fun addPropertyChangeListener(listener: PropertyChangeListener changeSupport.addPropertyChangeListener(listener) } fun removePropertyChangeListener(listener: PropertyChangeListener val p3 = Person3("jingbin", 30, 40000) // 关联监听器,用于监听属性修改 p3.addPropertyChangeListener(PropertyChangeListener