Flex中通过监听ObjectProxy的propertyChange事件检测一个Object是否变化的例子

 
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="
vertical"
verticalAlign="
middle"
backgroundColor="
white"
creationComplete="
init();" viewSourceURL="srcview/index.html">

<mx:Script>
<![CDATA[
import mx.events.PropertyChangeEvent;
import mx.utils.ObjectProxy;

private var object:Object = {};
private var objectProxy:ObjectProxy;

private function init():void {
objectProxy = new ObjectProxy(object);
objectProxy.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, updateChange);
objectProxy.name = "My Object";
objectProxy.id = 31;

/* Note: Any assignments made directly to the "object"
Object do not dispatch the propertyChange event. */

object.isDebug = false;
object.id = 33;

/* Note: Even though the earlier assignment to the "id"
property didn't dispatch the propertyChange event,
the "oldValue" property is still displayed as 33. */

objectProxy.id = 45;
}

private function updateChange(evt:PropertyChangeEvent):void {
arrColl.addItem(evt);
}
]]>
</mx:Script>

<mx:ArrayCollection id="arrColl" />

<mx:DataGrid dataProvider="{arrColl}"
sortableColumns="
false"
draggableColumns="
false"
width="
100%"
height="
100%">
<mx:columns>
<mx:DataGridColumn dataField="type" />
<mx:DataGridColumn dataField="property" />
<mx:DataGridColumn dataField="newValue" />
<mx:DataGridColumn dataField="oldValue" />
<mx:DataGridColumn dataField="source" />
</mx:columns>
</mx:DataGrid>

</mx:Application>
Java提供了一种监听对象变化的机制,即使用JavaBean的属性变化监听器(Property Change Listener)。这个监听器可以监听一个对象某个属性的变化,并在属性变化时触发相应的事件。 要实现JavaBean的属性变化监听器,需要遵循以下步骤: 1. 实现PropertyChangeListener接口,并实现其propertyChange方法,该方法会在属性变化时被调用。 ```java public class MyPropertyChangeListener implements PropertyChangeListener { @Override public void propertyChange(PropertyChangeEvent evt) { // 处理属性变化事件 } } ``` 2. 在需要监听对象添加PropertyChangeSupport对象,并在需要监听的属性的setter方法调用firePropertyChange方法触发属性变化事件。 ```java public class MyClass { private String myProperty; private PropertyChangeSupport propertyChangeSupport; public MyClass() { propertyChangeSupport = new PropertyChangeSupport(this); } public void setMyProperty(String newValue) { String oldValue = this.myProperty; this.myProperty = newValue; propertyChangeSupport.firePropertyChange("myProperty", oldValue, newValue); } public void addPropertyChangeListener(PropertyChangeListener listener) { propertyChangeSupport.addPropertyChangeListener(listener); } public void removePropertyChangeListener(PropertyChangeListener listener) { propertyChangeSupport.removePropertyChangeListener(listener); } } ``` 在上面的代码,我们在MyClass类添加了一个PropertyChangeSupport对象,并在setMyProperty方法调用了firePropertyChange方法,将属性变化事件通知给所有注册的PropertyChangeListener。 3. 在需要监听对象的代码,添加PropertyChangeListener并实现相应的处理方法。 ```java MyClass myObject = new MyClass(); myObject.addPropertyChangeListener(new MyPropertyChangeListener()); ``` 在上面的代码,我们向MyClass对象添加了一个MyPropertyChangeListener对象,用于监听其属性变化事件。 通过上面的步骤,我们就可以实现对一个对象属性变化监听。当属性变化时,我们的监听器会自动被触发,并执行相应的处理方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值