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

接下来的例子演示了Flex中通过监听ObjectProxy的propertyChange事件,检测一个Object是否变化。

让我们先来看一下Demo可以右键View Source或点击这里察看源代码):

 

 

下面是完整代码(或点击这里察看):

Download: main.mxml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
  3.         layout="vertical"
  4.         verticalAlign="middle"
  5.         backgroundColor="white"
  6.         creationComplete="init();">
  7.  
  8.     <mx:Script>
  9.         <![CDATA[
  10.             import mx.events.PropertyChangeEvent;
  11.             import mx.utils.ObjectProxy;
  12.  
  13.             private var object:Object = {};
  14.             private var objectProxy:ObjectProxy;
  15.  
  16.             private function init():void {
  17.                 objectProxy = new ObjectProxy(object);
  18.                 objectProxy.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, updateChange);
  19.                 objectProxy.name = "My Object";
  20.                 objectProxy.id = 31;
  21.  
  22.                 /* Note: Any assignments made directly to the "object"
  23.                    Object do not dispatch the propertyChange event. */
  24.                 object.isDebug = false;
  25.                 object.id = 33;
  26.  
  27.                 /* Note: Even though the earlier assignment to the "id"
  28.                    property  didn't dispatch the propertyChange event,
  29.                    the "oldValue" property is still displayed as 33. */
  30.                 objectProxy.id = 45;
  31.             }
  32.  
  33.             private function updateChange(evt:PropertyChangeEvent):void {
  34.                 arrColl.addItem(evt);
  35.             }
  36.         ]]>
  37.     </mx:Script>
  38.  
  39.     <mx:ArrayCollection id="arrColl" />
  40.  
  41.     <mx:DataGrid dataProvider="{arrColl}"
  42.             sortableColumns="false"
  43.             draggableColumns="false"
  44.             width="100%"
  45.             height="100%">
  46.         <mx:columns>
  47.             <mx:DataGridColumn dataField="type" />
  48.             <mx:DataGridColumn dataField="property" />
  49.             <mx:DataGridColumn dataField="newValue" />
  50.             <mx:DataGridColumn dataField="oldValue" />
  51.             <mx:DataGridColumn dataField="source" />
  52.         </mx:columns>
  53.     </mx:DataGrid>
  54.  
  55. </mx:Application>
代码:Peter deHaan 翻译/整理/编译:中文Flex例子
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
监听JPanel数组的某一个值,可以使用Java提供的PropertyChangeListener。每个JPanel都可以添加一个PropertyChangeListener,当数组该JPanel的某一个值发生化时,就会触发该JPanel上的PropertyChangeListener。 下面是一个简单的示例代码: ```java import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JPanel; import javax.swing.JFrame; public class JPanelArrayDemo { public static void main(String[] args) { JFrame frame = new JFrame("JPanel Array Demo"); JPanel[] panels = new JPanel[3]; for (int i = 0; i < panels.length; i++) { panels[i] = new JPanel(); panels[i].addPropertyChangeListener(new MyPropertyChangeListener(i)); frame.add(panels[i]); } frame.pack(); frame.setVisible(true); } private static class MyPropertyChangeListener implements PropertyChangeListener { private int index; public MyPropertyChangeListener(int index) { this.index = index; } @Override public void propertyChange(PropertyChangeEvent evt) { if (evt.getPropertyName().equals("myProperty")) { System.out.println("JPanel " + index + " property changed to " + evt.getNewValue()); } } } } ``` 在上面的示例,我们创建了一个JFrame并向其添加了三个JPanel。每个JPanel都添加了一个PropertyChangeListener,当其myProperty属性发生化时,就会触发该JPanel上的PropertyChangeListener,然后在控制台输出该JPanel的索引和新值。当需要将某个JPanel的myProperty属性设置为新的值时,只需要调用该JPanel的setProperty方法即可。例如,panels[1].setProperty("myProperty", "new value")。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值