- 浏览: 1233808 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
lankk:
lankk 写道事实上,在运行String s1=new St ...
理解String 及 String.intern() 在实际中的应用 -
lankk:
事实上,在运行String s1=new String(&qu ...
理解String 及 String.intern() 在实际中的应用 -
lankk:
同意1楼的说法http://docs.oracle.com/j ...
理解String 及 String.intern() 在实际中的应用 -
raoyutao:
...
jdk 线程池 ThreadPoolExecutor -
hongdanning:
理解了。之前困惑的一些明白了。谢谢分享。
理解String 及 String.intern() 在实际中的应用
package pcs; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; public abstract class Element { PropertyChangeSupport listeners = new PropertyChangeSupport(this); protected void addPropertyChangeListener(PropertyChangeListener listener) { listeners.addPropertyChangeListener(listener); } protected void addPropertyChangeListener(String propertyName,PropertyChangeListener listener) { listeners.addPropertyChangeListener(propertyName,listener); } protected void removePropertyChangeListener(PropertyChangeListener listener) { listeners.removePropertyChangeListener(listener); } protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { listeners.firePropertyChange(propertyName, oldValue, newValue); } protected PropertyChangeSupport getPropertyChangeSupport(){ return listeners; } }
package pcs; public class Node extends Element { private int id; private String name; private int age; private String address; public String getAddress() { return address; } public void setAddress(String address) { firePropertyChange("address",this.address,address); this.address = address; } public int getId() { return id; } public void setId(int id) { // firePropertyChange("id",this.id,id); getPropertyChangeSupport().fireIndexedPropertyChange("id",1,this.id,id); this.id = id; } public String getName() { return name; } public void setName(String name) { if (!name.equals(this.name)) { firePropertyChange("name", this.name, name); } this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
package pcs; import java.beans.IndexedPropertyChangeEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; public class Client { public static void main(String[] args) { Node a = new Node(); a.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { System.out.println("change-------------"); System.out.println(evt.getClass().getName() + "-- evt class name "); System.out.println(evt.getPropertyName() + " " + evt.getOldValue() + " " + evt.getNewValue()); System.out.println(evt.getSource() + "-- source"); System.out.println(evt.getPropagationId() + "-- id "); System.out.println("---------------"); if (evt instanceof IndexedPropertyChangeEvent) { System.out.println(((IndexedPropertyChangeEvent) evt).getIndex()+" --------index"); } } }); a.addPropertyChangeListener("name", new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { System.out.println("888888888888property name change88888888888888"); } }); a.addPropertyChangeListener("id", new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { System.out.println("888888888888property id change88888888888888"); } }); a.setId(222); a.setId(333); a.setAddress("bj"); a.setAddress("sh"); // a.setName("first"); // a.setName("second"); } }
PropertyChangeSupport是一个观察着模式的帮助类,
1.首先一般是写个基类设一个属性(字段)使用它,注意构造的时候必须传入自身。
然后设置addPropertyChangeListener,与remove的方法,这2个方法一般写到基类中,这样子类才可以实时的添加监听器,(也可以写个getPropertyChangeSupport方法, 然后让子类去添加listener,但一般没看人这样做过)。这一步主要是设置监听器。
2.然后发布事件, 用到的是firePropertyChange,fireIndexedPropertyChange 方法,第2个可以多设置一个index属性, 发布出去的是一个PropertyChangeEvent,IndexedPropertyChangeEvent是它的子类,所以用的时候要instanceof。这2个方法可以写到基类中让子类使用,也可以在基类中设置一个getListeners方法让子类获得PropertyChangeSupport,然后后自己去fire不同的方法,如 getPropertyChangeSupport().fireIndexedPropertyChange("id",1,this.id,id); 这一步是设置发布事件的方法
3.这一步才是真正的发布事件,在Bean 的set方法,或其他你想要的地方使用fire方法发布事件,注意fire的时候代码要在this.name = name; 之前,因为它会自动判断修改前后的值,写在this.name = name;之后的话因为this.name已经等于name,所以它不会真的发布事件,必须写在this.name = name;前面
4.最后一步是在客户代码中接受事件并执行相应的具体的监听器的逻辑,添加监听器的时候可以只监听具体的某一个字段
如 addPropertyChangeListener("name", new PropertyChangeListener(), 也可以监听全部addPropertyChangeListener(new PropertyChangeListener()
发表评论
-
连接池exception GetConnectionTimeoutException get/close not same thread
2015-09-24 14:44 7125环境 hibernate 4.2.0.Final sp ... -
tomcat 7 应用不能访问 及 配置管理界面
2015-09-16 15:26 2752tomcat 7 应用不能访问 及 配置管理界面 ... -
iteye blog 备份
2015-06-01 11:03 1200以前javaeye有博客导出成pdf的功能, 现在这个功能 ... -
jaxb xml 解析出 list对象
2015-03-26 16:29 10632jaxb想直接解析出list对象, 不用在list对象上再去 ... -
jvm notes
2014-12-16 15:19 1724运行时数据区 program counter re ... -
string split 空字符串问题
2014-09-02 15:02 1945String str="123,123,,1 ... -
IntelliJ IDEA keys
2014-05-29 15:35 1193open type Ctrl+N open ... -
POI excel 触发 公式 计算 删除空白行
2013-04-15 12:44 5094用POI api修改excel 表格数据后, 想触发计算公式 ... -
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 异常处理
2013-01-05 14:13 3231引用: http://javaskeleton.blogs ... -
MD5 SHA1 Base64 HmacSHA1
2012-10-26 14:23 2184MD5 SHA1 import java.securi ... -
struts2 jsp 禁止 直接 访问
2011-10-13 14:16 3152想要禁止 struts2 应用中 部分jsp 的 直接访问 ... -
jboss-log4j.xml
2011-09-22 17:42 3176使用 jboss_home/server/default/co ... -
jboss 映射 url 虚拟目录 设置system property
2011-08-31 12:56 2198jboss 4.2.3 在[jboss home ... -
jboss 连接池 scheduler
2011-08-04 19:13 1574将oracle-ds.xml 放到 jboss_home\s ... -
jboss Caused by: LifecycleException: Error initializaing : javax.management.R
2011-08-04 14:55 2319Caused by: LifecycleException: ... -
axis2 spring pojo 集成
2011-04-28 15:28 2497之前写的 http://renxiangzyq.iteye.c ... -
wsdl axis2 spring
2011-04-28 11:12 3318WSDL 文档是利用这些主要的元素来描述某个 web s ... -
apache jboss ssl 配置
2011-03-10 19:37 1603httpd.conf Include "co ... -
cron 表达式
2010-12-13 17:47 1137http://sosuny.iteye.com/blog/46 ... -
资源文件转码
2010-10-27 14:54 1200GBK to utf-8 native2ascii ...
相关推荐
在Java编程中,`PropertyChangeSupport` 是一个用于实现属性更改通知机制的工具类,它在JavaBeans规范中被广泛使用。这个类帮助开发者轻松地为对象添加属性变更监听器,以便在对象的属性发生变化时通知其他感兴趣的...
详解 Java 中的 PropertyChangeSupport 与 PropertyChangeListener Java 中的 PropertyChangeSupport 和 PropertyChangeListener 是 JavaBeans 规范中两个重要的类,它们用于实现属性变化的监听和通知。下面我们将...
闲着没事,突然想起Java的观察者模式中有一个PropertyChangeSupport与PropertyChangeListener,于是就想看看用js能不能也实现一个,毕竟有时候js写的东西也需要一个观察者模式,于是就写了点东西,应该能派上用场。
在Java编程中,`PropertyChangeSupport` 是一个用于事件通知的内置类,它主要用于实现JavaBeans组件中的属性改变事件监听。这个API使得对象能够向感兴趣的其他对象广播其属性的变化,从而实现了观察者模式。在本项目...
private PropertyChangeSupport changes = new PropertyChangeSupport(this); ``` - **添加/移除监听器**:提供公共方法允许外部对象添加或移除监听器。 ```java public void addPropertyChangeListener...
"DesignPatternJava"这个主题着重于如何在Java环境中应用设计模式,特别是其中的"PropertyChangeSupport"部分,这是一个与事件处理相关的模式。 "PropertyChangeSupport"是JavaBeans组件模型的一部分,主要用来支持...
3. **添加PropertyChangeSupport对象**:在JavaBean类中,添加一个`java.beans.PropertyChangeSupport`对象作为成员变量,用于管理属性更改事件。例如`private PropertyChangeSupport pcs = new ...
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this); public String getText() { return text; } public void setText(String newText) { String oldValue = text; ...
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this); public Person() {} public void addPropertyChangeListener(String propertyName, PropertyChangeListener ...
private PropertyChangeSupport listeners = new PropertyChangeSupport(this); public void addPropertyChangeListener(PropertyChangeListener l) { listeners.addPropertyChangeListener(l); } // 省略...
private PropertyChangeSupport listeners = new PropertyChangeSupport(this); public void addPropertyChangeListener(PropertyChangeListener l) { listeners.addPropertyChangeListener(l); } ...
`PropertyChangeSupport`类是JavaBeans框架中用于管理属性变更事件的关键组件。它负责维护事件监听器列表,并在属性变化时调用`firePropertyChange()`方法广播事件。在`alden3`类中,`changes`对象正是这样一个`...
private PropertyChangeSupport changes = new PropertyChangeSupport(this); public void setString(String newString) { String oldString = this.ourString; this.ourString = newString; // 触发属性变化...
`PropertyChangeSupport`类是用来实现属性更改通知的。正确答案是B,`PropertyChangeSupport()`。 6. 在Java中,`addPropertyChangeListener()`是用于添加属性改变监听器的方法,而`firePropertyChange()`则用来...
- **PropertyChangeSupport**:在JavaBeans中,`PropertyChangeSupport`类用于管理`PropertyChangeEvent`。通过添加`PropertyChangeListener`,对象可以监听其他对象的属性变化。当Bound属性值改变时,`...
首先,声明并实例化一个PropertyChangeSupport对象,然后使用它的`firePropertyChange()`方法来触发属性改变事件。开发工具或手动编程时,可以通过`addPropertyChangeListener()`和`removePropertyChangeListener()`...
例如,开发者可以使用`java.beans.PropertyChangeSupport`类来管理属性变更的监听器,当某个属性值改变时,通过`firePropertyChange()`方法通知监听器。 在实际应用中,观察者模式广泛用于各种场景,如GUI组件之间...
private PropertyChangeSupport changes = new PropertyChangeSupport(this); public void setOurString(String newString) { String oldString = ourString; ourString = newString; changes....
- 数据绑定:Swing支持双向数据绑定,模型和视图之间的数据可以通过特定机制自动同步,如`PropertyChangeSupport`和`BoundPropertySupport`。 通过学习和理解Swing下的MVC模式,开发者可以更好地组织代码,提高代码...
3. **PropertyChangeSupport**:JGoodies Binding扩展了Java内置的`java.beans.PropertyChangeSupport`,提供了一种更加简洁的方式来处理属性更改事件。开发者可以通过调用`bindProperty()`方法轻松地建立绑定关系。...