flex中的架构,UIComponent类的继承关系
UIComponent > FlexSprite> Sprite >DisplayObjectContainer>InteractiveObject >Displayobject
2、为什么使用失效机制(invalidation mechanism)
一种情况是,当设置了组件的多个属性后,比如Button 控件的label 和icon 属性,我们需要所有属性被设置后一次性执行commitProperties(), measure(), updateDisplayList()方法,而不是设置过label 属性后执行一遍这些方法,然后在设置icon属性后又执行一次这些方法。
另一种情况是几个组件同时更改了它们的字体大小。程序更改字体大小的执行速度大大快于Flex 更新应用的速度,因此要在确定最终更改字体之后才开始更新布局。另外,Flex 需要协调布局操作以消除任何冗余过程,而不是在每个组件更新它的字体大小之后都执行一次布局操作。
Flex 使用“失效机制(invalidation mechanism)”来同步组件的更改。Flex 用一系列方法的调用,比如在setter方法内监控一个变更变量来标记组件的某些东西已经发生变化, 然后在下一个“渲染事件(renderevent)”中触发组件的commitProperties(), measure(), layoutChrome(),updateDisplayList()检查这些布尔变量来完成最终的变更逻辑。这样做的额外好处就是setter方法可以更迅速地返回,把对新属性值的处理留给了commitProperties()方法。
失效方法及其对应的触发函数如下:
invalidateProperties() 通知组件,以使下次屏幕更新时,它的commitProperties()方法被调用。
invalidateSize() 通知组件,以使下次屏幕更新时,它的measure()方法被调用。
invalidateDisplayList() 通知组件,以使下次屏幕更新时它的layoutChrome()方法和updateDisplayList()方法能被调用。
当组件调用一个“失效”方法时,它就通知Flex该组件已经被更新。当多个组件调用失效
方法,Flex 会在schedules中协调这些更新,以使这些更新操作在下一次屏幕更新时一起执行。注意,createChildren()没有对应的失效方法,它会在调用后被立即执行。
invalidateDisplayList
标记组件,以便在稍后屏幕更新期间调用该组件的 updateDisplayList() 方法。
当多次改变控件的某些属性(如 高,宽,数据)后,调用该方法以便一次性的刷新相关属性和布局等。较之于一次一次的自动刷新,更有效率。
分享到:
相关推荐
在 Faces API 中,FacesContext 和 ExternalContext 是两个经常使用的类,本文将详细介绍 FacesContext 的编程接口和使用方法。 FacesContext 的实例是在 FacesServlet 对象中创建的,每个 JSF 请求都会获取一个 ...
- **布局、导航、状态组件的实践**:详细介绍这些高级组件的使用场景和实现方法。 #### 三、总结 本文介绍了Flex框架下的高级组件及其使用方法。通过学习这些高级组件,开发者可以构建出更加强大、美观的应用程序...
**关于重载UIComponent类的protected方法** - **`commitProperties()`**:该方法用于处理组件属性的变化,确保所有属性的变化能够按照预期的顺序执行。 - **`createChildren()`**:此方法用于创建组件的子组件,...
- **用编程方式把验证器与UIComponent实例关联**:介绍了编程方式下的实现方法。 综上所述,《JavaServer Faces完全参考手册》详细介绍了JSF的核心概念和技术,从基础知识到高级主题均有覆盖,是一本非常全面的...
在JSF框架中,此模式用于动态创建对象,比如在生命周期管理中,LifeCycle接口的实现可能会根据配置使用不同的工厂方法来创建PhaseListener对象,这提供了更大的灵活性和可扩展性。 4. **State模式**: State模式...
- **重载`UIComponent`的受保护方法**:为了更好地控制组件的行为,可能需要重载`UIComponent`类中的某些受保护方法。这些方法包括但不限于: - `commitProperties()`:用于提交组件所有属性的变化。 - `create...
这通常通过提供一个带有`validateXxx`签名的方法来完成,该方法返回`void`类型,并接收`FacesContext`, `UIComponent`, `Object`三个参数。这样,JSF框架在表单提交时会自动调用该方法进行验证。 ```java package ...
为了创建高级可视化组件,开发者需要实现一个构造函数(constructor),并可能需要重载`UIComponent`类中的某些受保护的方法。这些方法包括但不限于: 1. **`commitProperties()`**:此方法用于提交组件的所有属性...
总之,通过上述知识点的详细介绍,我们了解了在Flex中如何实现Camera摄像头的在线拍照功能。这不仅涉及到对Camera组件的初始化和控制,还包括视频流的播放、图像的捕获和展示等多个环节。这些技术点对于开发者而言,...
总结来说,Flex中的画面快照截图主要依赖于`BitmapData`和`Bitmap`类,通过`draw()`方法捕获屏幕状态,并利用`UIComponent`作为载体,将截图显示在舞台上。这个过程涉及到Flex的基本图形处理和组件模型,对于开发富...
本示例"Demo4-内置事件订阅1"主要介绍了如何订阅并处理内置的事件,特别是“打开UI成功”事件。以下是详细的步骤和知识点: 1. **创建项目与场景**:在开始订阅事件之前,你需要创建一个新的Unity项目,并建立初始...
- **UIComponent**和**UIViewRoot**:UIComponent代表视图中的一个元素,而UIViewRoot是整个页面的顶级组件,它管理所有子组件。 - **ManagedBean**:这是JSF中用于管理业务逻辑的对象,可以被视图引用并调用其方法...
本文重点介绍如何使用Flex中的图形API来实现画线功能,并结合实际代码进行分析。 ### 创建画线对象 在Flex中,可以通过`Sprite`类来创建一个画布对象,然后使用该对象的`graphics`属性来绘制线条。首先,定义一个`...
下面将详细介绍这三种加载图片的方法以及相关的知识点。 1. **imread函数**: imread函数是MATLAB中最基础的图像读取函数,可以用于加载各种格式的图片文件。例如,如果你有一张名为“powertrain.jpg”的图片,你...
UIComponent component = FacesContext.getCurrentInstance().getViewRoot().findComponent("myComponentId"); if (component != null) { // 获取属性值 String userInput = (String) component.getAttributes()...
2. **JSF组件模型**:介绍JSF组件的概念,包括UIComponent、UIViewRoot、Facelet等,以及如何自定义组件。 3. **数据绑定与EL表达式**:讲解Expression Language(EL)如何用于在视图和模型之间绑定数据。 4. **事件...
4. **EL与JSP**:解释如何使用EL表达式在JSP页面上绑定数据和调用方法。 5. **ManagedBean**:说明ManagedBean的创建、范围、依赖注入以及如何在视图和模型之间传递数据。 6. **FacesConfig配置**:讲解如何通过...
下面将详细介绍这些阶段以及自定义事件的创建与分发。 1. **捕获阶段**: 在Flex事件流中,捕获阶段是从最外层的UIComponent祖先组件开始,逐级向下传递,直到到达目标组件。在这个阶段,事件会依次经过所有在事件...