`
nuthell
  • 浏览: 30242 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

PropertyChangeEvent的应用

阅读更多
private var object:Object = {};
            private var objectProxy:ObjectProxy;

objectProxy = new ObjectProxy(object);

                objectProxy.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, updateChange);
                objectProxy.name = "My Object";
                objectProxy.id = 31;
                
                //这二个赋值语句不会引发PropertyChangeEvent事件
                object.isDebug = false;
                object.id = 33;
                
                //将id从33改成45,并引发PropertyChangeEvent事件
                objectProxy.id = 45;





1.ObjectProxy概述
       主要是为了监控一个观察对象,当这个观察对象的值发生变化时,由该类派发相应的事件。
       如果不是你自己的类,你又希望绑定它,或你只是希望运行时添加绑定功能,你可以使用ObjectProxy类。
       ObjectProxy封装一个没有绑定的类并在这个被绑定类的任何属性改变时派发属性改变事件,使得你能监听你程序里的该对象的属性改变。

2.ObjectProxy常见属性和方法
属性
uid : String      此对象的唯一标识符。

方法
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
       注册事件侦听器对象,以便侦听器能够接收事件通知。
hasEventListener(type:String):Boolean
       检查是否该对象及父对象为特定事件类型注册了任何事件侦听器。
willTrigger(type:String):Boolean
       检查是否用此对象监听某种类型的事件,与hasEventListener有什么区别?


3.ObjectProxy举例
例1:ObjectProxy监控观察对象UserInfo。接着我添加了一个事件监听,来跟踪UserInfo各项的改变。
UserInfo.as
package
{
    public class UserInfo
    {
        public var userName:String="xxx";//如果没有初值,则PropertyChangeEvent 中的oldValue为null
        public var password:String="123";
        
        public function UserInfo()
        {
        }
    }
}

ObjectProxyExam1.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx"
               creationComplete="creationCompleteHandler()"
               minWidth="955" minHeight="600">
    <s:layout>
        <s:VerticalLayout/>
    </s:layout>
    <fx:Declarations>
        <!-- 将非可视元素(例如服务、值对象)放在此处 -->
    </fx:Declarations>
    
    <fx:Script>
        <![CDATA[
            import mx.events.PropertyChangeEvent;
            import mx.utils.ObjectProxy;
            import mx.utils.object_proxy;  
            
            private var userInfo:UserInfo = new UserInfo(); 
            private var objectProxy:ObjectProxy; 
            
            protected function creationCompleteHandler():void 
            { 
                objectProxy = new ObjectProxy( userInfo ); 
                objectProxy.addEventListener( PropertyChangeEvent.PROPERTY_CHANGE, onPropertyChange ); 
                //这里不用写userInfo.userName,好象userName就是objectProexy的属性一样
                objectProxy.userName = "EladElrom"; 
                //objectProxy.password = "123456";   //与上面赋值效果相同
                
                lb4.text=objectProxy.willTrigger("delete").toString();//没有监听这个事件
                lb5.text=objectProxy.willTrigger(PropertyChangeEvent.PROPERTY_CHANGE).toString();//监听了这个事件
                lb6.text=objectProxy.hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE).toString();//监听了这个事件
                
            }  

            private function onPropertyChange( event:PropertyChangeEvent ):void{  
                lb1.text = event.newValue.toString(); 
                lb2.text = event.oldValue.toString();
                lb3.text = event.property.toString();
            }      
        ]]>
    </fx:Script>
    
    <s:Label id="lb1" />  
    <s:Label id="lb2" />  
    <s:Label id="lb3" />  
    <s:Label id="lb4" /> 
    <s:Label id="lb5" /> 
    <s:Label id="lb6" />
</s:Application>

运行结果
    EladElrom
    xxx
    userName
    false
    true
    true
分享到:
评论

相关推荐

    swing项目应用总结

    3. **事件处理**:当用户更改日期时,会触发事件,如`PropertyChangeEvent`,我们需要监听这些事件来响应用户的操作。 4. **国际化**:Swing支持多语言环境,日期选择器应考虑不同地区的日期格式。 5. **定制化**...

    DesignPatternJava

    在Java编程领域,设计模式是一种解决常见问题的模板或最佳实践,它被广泛应用于构建可扩展、可维护的软件系统。"DesignPatternJava"这个主题着重于如何在Java环境中应用设计模式,特别是其中的...

    JavaBeans教程.pdf

    它们在Java应用程序开发中扮演着重要角色,特别是在用户界面(UI)设计和企业级应用开发中。以下是对JavaBeans及其属性的详细解释: 1. **JavaBean属性**: - **Simple属性**:这是最基本的属性类型,它包含一个...

    清华大学javaBean课件

    例如,每次属性值更改后,都会触发一个`PropertyChangeEvent`,包含属性名、原值和新值。 4. Constrained属性:在属性值即将改变时,允许其他与之关联的对象通过抛出`PropertyVetoException`来阻止变更。 JavaBean...

    JMF API文档

    5. **事件处理**:JMF提供了事件驱动的编程模型,通过`ControllerEvent`和`PropertyChangeEvent`等事件,开发者可以监听播放状态的变化和属性的修改。 6. **多线程**:多媒体处理通常涉及多个并发操作,如解码、...

    JAVA日期控件的使用例子

    public void propertyChange(PropertyChangeEvent e) { if ("date".equals(e.getPropertyName())) { Date newDate = (Date) e.getNewValue(); // 处理新选择的日期 } } }); ``` 3. **JSpinner的使用**: - ...

    JavaBean - Bound属性

    这种特性使得JavaBean在Java应用程序和网页设计中(如JSP)特别有用,因为它简化了组件之间的交互。 在JavaBean规范中,实现Bound属性通常通过以下几个步骤: 1. **定义属性**:首先,你需要创建一个私有的实例...

    Flex4视频教程_02-01事件概述.rar

    10. **事件与数据绑定**:在Flex4中,数据绑定使得组件的属性可以自动响应数据源的变化,而这些变化通常会触发`PropertyChangeEvent`,使开发者能够更新UI。 通过学习这个“Flex4视频教程_02-01事件概述”,开发者...

    dotnet C# 基于 INotifyPropertyChanged 实现一个 CLR 属性绑定辅助类.rar

    标签中提到的JAVA虽然与本主题不符,但值得指出的是,Java也有类似的概念,即`java.beans.PropertyChangeSupport`类和`PropertyChangeEvent`,它们在Java Swing和JavaFX等UI框架中用于实现属性变化的通知。...

    SWT 3.6 API Help doc html版 swt3.6帮助文档

    开发者可以通过`.databinding`包中的类和接口实现这一功能,如`Bindable`、`ValueProvider`和`PropertyChangeEvent`。 **8. 拓展与JFace** SWT通常与JFace库结合使用,JFace为SWT提供了更高级别的抽象,简化了UI的...

    Flex常用教程及库

    此外,`mx.events.PropertyChangeEvent`事件可用于监听属性变化,确保数据同步的正确性。 压缩包中的“FLEX数据绑定专题”可能包含以下内容: 1. **基础教程**:介绍数据绑定的基本概念,如何在MXML和ActionScript...

    使用PropertyChangeSupport监控变量

    在Java编程中,`PropertyChangeSupport` 是一个用于实现属性更改通知机制的工具类,它在JavaBeans规范中被广泛使用。这个类帮助开发者轻松地为...通过理解和熟练运用,我们可以构建出更加灵活和可维护的Java应用程序。

    Flex从入门到实践——源代码(10章)

    源代码中会展示如何使用mx.binding.Binding类和mx.events.PropertyChangeEvent类来实现数据绑定。 5. **事件处理**:Flex组件间的交互通常通过事件触发。学习如何使用addEventListener、removeEventListener和...

    flex数据绑定的原理

    在Flex开发中,数据绑定(Data Binding)是一种强大的机制,它允许UI组件的状态与应用程序的数据模型之间自动同步。数据绑定的原理是通过监听数据源的变化,并自动更新与之绑定的UI组件,反之亦然,从而简化了代码并...

    SWING 日历控件

    public void propertyChange(PropertyChangeEvent e) { if ("date".equals(e.getPropertyName())) { Date selectedDate = (Date) e.getNewValue(); // 处理选中的日期 } } }); ``` 4. **布局管理**:将日历...

    flex-带checkbox的datagrid

    你可以使用 Flex 的 Bindding 或 PropertyChangeEvent 来实现这一目的。 5. **选择模型**:Flex Datagrid有多种选择模型,如SingleSelectionModel和MultipleSelectionModel。带复选框的Datagrid通常需要...

    JavaBeans程序开发从入门到精通

    JavaBeans的属性有四种特殊类型:Simple、Indexed、Bound和Constrained,每种类型都有特定的功能和应用场景。 1. **Simple属性** Simple属性是最基础的属性类型,它代表一个简单的数据值,通过一对get和set方法...

    Eclipse首选项开发

    为了响应首选项值的变化,开发者可以监听`PropertyChangeEvent`事件。当某个首选项值被改变时,会触发此事件。通过为`PreferenceStore`添加`IPropertyChangeListener`,开发者可以在事件发生时响应用户的选择。 在...

    JavaBeans教程(范例入门

    每当`ourString`的值通过`setString()`方法更新时,就会触发`PropertyChangeEvent`,并将事件发送给所有注册的监听器。这实现了属性变更的实时广播,增强了组件之间的交互性和响应性。 ### PropertyChangeSupport类...

    flex数据绑定

    当数据源发生变化时,通常会触发`PropertyChangeEvent`,数据绑定监听这些事件以决定何时更新视图。`Bindable`事件可以手动触发,以强制视图更新。 6. 动态属性绑定: Flex允许对动态创建的属性进行绑定,这在...

Global site tag (gtag.js) - Google Analytics