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; } } |
顯示內容變化的頁面為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> |
屬性變化顯示頁面運行結果4-7所示。