4.4.3 Bound属性
Bound属性表示当该种属性的值发生变化时,会自动触发PropertyChange事件,通知其他的对象该属性发生了变化。事件中封装了属性名、属性的原值、属性变化后的新值。
下面给出一个例子说明Bound属性的用法:编写一个JavaBean,用于接收name变量,当name变量值发生变化时,在页面中显示出变化情况。
首先建立JavaBean,类文件名为Bound.java,文件代码如代码4-9所示。
代码4-9 Bound.java
package com; import java.beans.*; public class Bound { private String name; /*向监听者对象发送信息*/ private PropertyChangeSupport support=new PropertyChangeSupport(this); public Bound(){ } /*事件监听者对象和Bound对象绑定起来,并把它添加到监听者队列中去*/ public void addPropertyChangeListener(PropertyChangeListener listener){ if(support==null){ support=new PropertyChangeSupport(this); } support.addPropertyChangeListener(listener); } /*从监听者队列中移除监听者对象*/ public void removePropertyChangeListener(PropertyChangeListener listener){ if(support==null){ support=new PropertyChangeSupport(this); } support.removePropertyChangeListener(listener); } public void setName(String name){ String tmp=name; this.name=name; /*通知监听者队列里的所有事件监听者对象当前对象的属性值改变的事件*/ support.firePropertyChange("name",tmp,name); } public String getName(){ return name; } } |
监听者为Listen.java类,文件代码如代码4-10所示。
代码4-10 Listen.java
package com; import java.beans.*; public class Listen implements PropertyChangeListener{ private String inform; public Listen(){ inform="Bean中的属性值没有变化"; } /*属性值变化后触发的事件*/ public void propertyChange(PropertyChangeEvent evt){ inform="Bean中的属性值发生了变化"; } public String getInform(){ return inform; } }<%@ page contentType="text/html;charset=GBK" %> |
显示属性变化的页面为listen.jsp,文件代码如代码4-11所示。
代码4-11 listen.jsp
<%@ page contentType="text/html;charset=GBK" %> <%@ page import="com.Bound" %> <%@ page import="com.Listen" %> <html> <head> <title>Bound 测试</title> <head> <body> <% Bound bound=new Bound(); Listen listen=new Listen(); bound.setName("张三"); %> <p><b>name = <%=bound.getName()%></b> <% bound.addPropertyChangeListener(listen); bound.setName("李四"); %> <hr><%=listen.getInform()%> <hr><b>name = <%=bound.getName()%></b> </body> </html> |