Flex企业应用开发实践学习笔记(六)——使用ActionScript创建自定义组件

全面掌握Flex开发:从入门到实践 本文还有配套的精品资源,点击获取 简介:Flex是由Adobe推出的开源框架,专用于构建富互联网应用程序。本文通过详解Flex的核心概念和技术,引导初学者快速入门。内容涵盖Flex简介、ActionScript 3.0基础、MXML与组件、Flex架构与生命周期、数据绑定、与BlazeDS的集成、调试与性能优化以及实战项目。从理论到实践,本文将帮助开发者全面掌握Flex开发... 阅读详情

1. 为什么要创建自定义组件

创建自定义组件通常有以下目的:

更改已有组件的可视化外观或可视化特性。

创建复合组件将两个或多个组件包装在新组件中。

通过继承UIComponent类来创建全新的组件。

通常用继承已有类的方式来创建组件。比如,要创建基于Button的控件,我们就创建mx.controls.Button类的一个子类。如果要创建全新的组件,则需要创建mx.core.UIComponent类的子类。

2. 重载UIComponent类的protected方法

Flex所有的可视化组件都是UIComponent类的子类。因此,可视化组件继承了UIComponent类所定义的方法(methods)、属性(properties)、事件(events)、样式(styles)和效果(effects)。

要创建自定义的可视化组件,必须实现一个构造器(constructor),另外要有选择性地重载UIComponent类中的一个或多个protected方法。表2-2列出了自定义组件需要重载的protected方法。

从前面的内容我们可以知道,组件的使用者不会直接调用所有这些方法,Flex框架会自动调用这些方法。

自定义组件需要重载的protected方法

commitProperties()

       提交组件的所有的属性变化,要么使属性同时更改,要么确保属性按照特定的顺序设置。

createChildren()

      创建组件的子组件。比如ComboBox控件包含了一个TextInput控件和一个Button控件作为它的子组件。

layoutChrome()

      定义Container类的子类容器的边框区域。

measure ()

     设置组件的默认尺寸和默认的最小尺寸。

updateDisplayList()

     根据以前所设置的属性和式样来确定组件的子组件在屏幕上的尺寸及位置,并且画出组件使用的所有皮肤及图形化元素。组件的父容器负责确定组件尺寸。

3. 创建组件的步骤

为了实现一个组件,就要重载组件的方法,定义新的属性,分发新的事件,或者执行其他任何应用所需的自定义的逻辑。要想实现自己的组件,应遵循以下这些常规步骤:

(1)如果有必要,为组件创建所需的皮肤。

(2)创建 ActionScript类文件。

1)从一个基类扩展,比如UIComponent或者其他的组件类。

2)指定使用者能够通过MXML标记进行设置的属性。

3)嵌入所有的图片和皮肤文件。

4)实现构造器。

5)实现UIComponent.createChildren()方法。

6)实现UIComponent.commitProperties()方法。

7)实现UIComponent.measure()方法。

8)实现UIComponent.layoutChrome()方法。

9)实现UIComponent.updateDisplayList()方法。

10)增加属性、方法、样式、事件以及元数据。

(3)以ActionScript文件或SWC文件的形式部署组件。

定义新组件时不一定要重载所有方法,只需要重载实现组件功能所需的方法即可。如果创建现存组件的子类,比如Button控件或VBox容器,那么必须实现组件中增加的新功能所需的方法。

例如,实现一个自定义的Button控件,该控件使用新的机制来定义默认大小。在这种情况下,只需要重载measure()方法即可。

或者,要实现VBox容器的一个新子类,新子类利用VBox类已有的所有与设定尺寸(sizing)有关的逻辑,但是变更了VBox类的布局逻辑以实现“自底向上”的方式来布局容器中的子组件,而不是“自顶向下”的布局逻辑。在这种情况下,只需要重载updateDisplayList()方法。


4. 自定义组件的实现

            1).基本组件结构

            2). 实现构造器

                     用AS写的UIComponent类或子类的子类,应该应以public构造器的方法。AS中构造器有以下特点。

                     【没有返回类型】

                     【应被声明为public】

                     【没有参数】

                     【调用super()方法以使用父类的构造器】

            每一个类只能有一个构造器方法,AS不支持构造方法重载。【不要在构造器中创建组件的内部对象,因为在没有把组件放入显示列表之前创建组件的内部对象没有任何意义,只能增加系统的开销。因此,构造器只用于设置组件属性的初始值。如果组件要创建组件内部的对象,可以在createChildren()方法中创建】。

            3).实现createChildren()方法

                    应用开发者(非组件开发者)不要直接调用createChildren()方法。了解组件的生命周期我们知道:当开发者调用addChild()方法将组件添加到父容器中时,Flex会自动调用组件的createChildren()方法。

【注意】createChildren()没有与之相关的失效方法,这意味着组件被添加到父组件中时,不会等到下一个渲染事件时才调用这个方法。

            4).实现commitProperties()方法

使用commitProperties()方法来协调对组件属性的更改。绝大多数情况下,都对那些影响组件在屏幕上显示的属性使用该方法。当invalidateProperties()方法被调用后,commitProperties()方法会在invalidateProperties()方法调用之后的下一个“渲染事件(render event)”中执行。【当使用addChild()方法向容器中添加一个组件时,Flex会自动调用invalidateProperties()方法】commitProperties()方法的调用发生在measure()方法调用之前,这使我们能够设置measure()方法可能会使用到的属性。

             【优点】:

                          【能够 协调对多个属性的修改,使得这些变更能够同时生效】【能够协调对同一个属性的多次修改】

            5).实现measure()方法

当invalidateSize()方法被调用后,measure()方法会在invalidateSize()方法调用之后的下一个“渲染事件(render event)”中执行。【当使用addChild()方法向容器中添加一个组件时,Flex会自动调用invalidateSize()方法】

measure需要处理的属性:

measureHeight、 默认高度

measureWidth、 默认宽度

这些属性被设置为0,知道measure()方法被执行,如果它们被设置为0,那么使得组件在默认情况下不可见。

measureMinHeight、默认最小高度

measureMinWidth、默认最小宽度

            6).计算默认大小

            7).实现layoutChrome()方法

Container类和container的子类,使用layoutChrome()方法来定义容器的边框区域。当invalidateDisplayList()方法被调用后,layoutChrome()方法会在invalidateDisplayList()方法调用之后的下一个“渲染事件(render event)”中执行。【当使用addChild()方法向容器中添加一个组件时,Flex会自动调用invalidateDisplayList()方法】

不要在layoutChrome方法中调用组件的addChild()方法,会出现死循环。

            8).实现updateDisplayList()方法

updateDisplayList()方法按照布局的提交和度量阶段所设定的属性和式样来设定子组件的大小和位置,并画出组件所使用的皮肤和图片元素,而且组件本身大小则由组件的父容器来决定。知道组件的updateDisplayList()方法被调用之后,组件才能在屏幕上显示出来。

            9).在组件中画图

每个Flex组件都是FlashSprite类的子类,因此集成了Sprite.graphics属性。Sprite.graphics属性所指的对象Graphics对象可以用来向组件中添加适量绘画(vector drawings)

example:

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{

                super.updateDisplayList(unscaledWidth,unscaledHeight);

                graphics.lineStyle(1, 0x000000, 1.0);

                graphics.drawRect(0, 0, unscaledWidth, unscaledHeight);

}

miRNA测序数据生信分析——第二讲,数据库下载整理 一个非编码RNA的整合数据库,可用来识别鉴定各种类型的ncRNA。提供的是ncRNA在基因组上的基因序列,而非转录成熟ncRNA的序列。最新版:2022-11-02Rfam数据库中ncRNA类型分三大类:Cis-reg和Gene和Intron。这三大类又有子类。一个提供包括miRNA序列数据、注释、预测基因靶标等信息的全方位数据库,是存储miRNA信息最主要的公共数据库之一。最新版:2018-12-01。 阅读详情

相关推荐

SolidWorks草图绘制实战:如何用图片参考快速搞定智能小车底板设计

本文详细介绍了在SolidWorks中利用图片参考进行草图绘制的实战方法,以智能小车底板设计为例,帮助设计师快速将概念转化为精准三维模型。通过插入、对齐参考图片并高效描图,结合参数化约束与尺寸驱动,大幅提升设计效率和准确性,尤其适合新手入门与老手优化工作流。

rust6ferris的博客 219

FLEX学习笔记 --- ACTIONSCRIPT & MXML

先谈谈Flex的什么什么 动手写过的只有两种文件: .mxml文件和.as文件。 接触到的代码也只有两种: 带<>的标签,和ActionScript代码。 Flex应用中最终将会生成一个个.swf文件。我们通过浏览器浏览到的某个.html页面,其实真正运行的是那个.swf文件。而这个.swf文件是用ActionScript脚本写出来的,中间怎么编译或者解析的,不去理它...

SpallationMetamorph的专栏 247

FPGA以太网开发实战:YT8511 PHY芯片MDIO接口配置全流程(附Verilog代码)

本文详细介绍了FPGA以太网开发中YT8511 PHY芯片MDIO接口的配置全流程,包括MDIO接口技术解析、Verilog状态机设计、核心代码实现细节及实战调试经验。通过提供经过验证的Verilog代码和优化策略,帮助开发者快速掌握以太网PHY芯片配置技术,提升通信系统性能。

weixin_29184371的博客 232

Flex与ACtionSCript关系揭秘

本文向大家简单介绍一下Flex与ACtionSCript编程的概念,Flex是一种基于标准编程模型的高效RIA开发产品集,ACtionSCript是为AdobeFlash设计的面向object的程式设计语言。   在学习Flex的过程中,你可能会遇到Flex和ACtionSCript关系的问题,这里和大家分享一下,ACtionSCript是为Adob

welcomeni的专栏 3128

本地部署 Anything LLM+Ollama+DeepSeek R1 大模型并实现外部访问

DeepSeek 一经发布就引起社会的广泛的关注,因为 DeepSeek 的价格低廉,性能卓越,提供了多种使用方式,满足不同用户的需求和场景。本文将详细的介绍如何在本地 Windows 上安装部署 Anything LLM + Ollama 来实现用户和 DeepSeek-r1 对话的功能以及利用路由侠内网穿透实现外网访问。

lyxnwct的博客 1898

企业微信获取code,URL详解

“https://open.weixin.qq.com/connect/oauth2/authorize?”+ “appid=”企业ID “&redirect_uri=”重定向路径+ “&agentid=”小程序AgentId+ “&response_type=code&scope=snsapi_userinfo&state=123&conn...

weixin_44804985的博客 8734

创建自定义控件

创建自定义控件来源: http://www.codeproject.com/KB/miscctrl/CustomControl.aspx代码下载: http://www.codeproject.com/KB/miscctrl/CustomControl/CustomControl.zip介绍在前一篇文章中(http://www.codeproject.com/miscctrl/su

xiaolang86的专栏 6766

拯救者Y9000P 2022双系统实战:Ubuntu22.04分区优化与驱动避坑指南

本文提供联想拯救者Y9000P 2022款安装Ubuntu 22.04双系统的详细实战指南。重点讲解针对该机型的磁盘分区优化方案、NVIDIA显卡驱动安装避坑技巧,以及安装后的网络、时间同步等必备配置,帮助用户高效完成双系统部署并提升使用体验。

weixin_29208327的博客 424

使用ActionScript创建自定义组件

通常用继承已有类的方式来创建组件。比如,要创建基于Button的控件,我们就创建mx.controls.Button类的一个子类。如果要创建全新的组件,则需要创建mx.core.UIComponent类的子类。 重载UIComponent类的protected方法 Fle

sysu_2010的专栏 2761

运行openclaw gateway install时出现Gateway install failed: Error: schtasks create failed的解决方案

本文主要介绍了运行openclaw gateway install时出现Gateway install failed: Error: schtasks create failed的解决方案,希望能对学习和使用openclaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

【tessy】软件环境配置:Keil C51 Keil uVision UVSC (Default)

本文详细说明了tessy软件如何配置【Keil C51 Keil uVision UVSC (Default)】环境,具体操作步骤和注意事项

qq_37282365的博客 601

决定用MXML还是用Actionscript创建组件

 创建组件的第一件事情就是决定使用MXML还是ActionScript,最终,决定选择那种方式开发组件是来自应用的需要。下面使一些基本的指导原则:1.MXML组件和ActionScript组件都定义了一个新的ActionScript类。 2.几乎是所有可以用ActionScript实现的组件,都可以用MXML实现。然而,对于创建简单的组件,像对现有的组件修改行为和基本的特征,这些比较简单的工作使用

czx33859066的专栏 1167

【AI理论学习】深入理解扩散模型:Diffusion Models(DDPM)(理论篇)

继OpenAI在2021提出的文本转图像模型之后,越来越多的大公司卷入这个方向,例如谷歌相继推出了和。一些主流的文本转图像模型,例如,和采用了扩散模型()作为图像生成模型,这也引发了对扩散模型的研究热潮。与GAN相比,扩散模型训练更稳定,而且能够生成更多样的样本,OpenAI的论文也证明了

小哲的博客 5213

如何创建ActionScript类文件重写flex组件

如何创建ActionScript类文件重写flex组件 ⑴从一个基类扩展,比如UIComponent或者其他的flex组件类     ⑵指定使用者能够通过MXML标记进行设置的属性     ⑶嵌入(Embed)所有的图片和皮肤文件,文件大小尽可能小     ⑷实现构造器,可以设置属性和样式的缺省值,或者初始化数据结构,比如数组     ⑸根据需要,确定是否覆盖以下五个

u013174900的专栏 794

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Flex之使用ActionScript构造组件

因为是专门针对ActionScript来写的篇章,所以,对于ActionScript大家有功夫最好去看看基础入门知识,其实很容易上手很多部分都与JAVA面向对象及以前的基础知识相似 首先来说下ActionScript常用的三种方式 Flex的核心是MXML和ActionScript 。 MXML 是用于为 Flex应用程序进行用户界面组件布局, 它属于表示层,最终要编辑成ActionScri...

浮夸 161

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Flex自定义组件与自定义事件

1、自定义组件2、自定义事件3、结合使用 一、自定义组件(使用的是Flex组件,ActionScript组件相对麻烦点,可视化差点)该组件由一个TextArea和两个Button组成,如图: 代码:MyComponent.mxml /** * 1. 编译期间执行 * 2. 自定义组件一般可以通过dispatchEvent委派p

dengxingbo的专栏 3647

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

flex系列文章4:谈谈flex自定义组件

Flex组件开发可分为两种. 一是在mxml中创建自定义组件.另一种则在actionscript class中创建. 总体说来其实大同小异. 首先我们要转换一种观点. mxml组件文件和ActionScript class文件一样都是类.开发者都可以在语法和机制上new 这个类的. 比如两个一模一样的组件.MyButton.mxml 和 MyButton.as. 当我们想要在某一个as函数中动态的

elimago的专栏 2318

创建 ActionScript 组件

创建一个MyButton.as文件代码如下:// ActionScript filepackage myControls{ import mx.controls.Button;     public class MyButton extends Button {        public function MyButton() {        this.label = "Click Me!"

linson0116的专栏 808

在FLEX中使用ActionScript代码

使用ActionScript块在MXML文件中当FLEX使用AC代码的时候需要写在FLEX的标签当中, ... ]]>例如: var z:Number; public function doSomething():void { z = z + 1; // This must be in a functio

1997

1.1节. 用Flex Builder创建Flex项目

  第一章. Flex 与 ActionScript 基础 (常青) 一个Flex应用程序有ActionScript和MXML两种语言代码组成。从3.0开始ActionScript<a name="scripting language">已经从基于原型脚本语言进化到完全面向对象的,强类型的符合ECMAScript标准的脚本语言。MXML则是一种标记语言,非常类似于大家所熟悉的

6098

使用Flex组件开发

在Flex应用程序中ActionScript的最主要的用处大概就是使用可视化的控件和容器来开发了。Flex提供了几种技术来完成这样工作,包括了用ActionScript引用Flex控件以及操控控件和容器的实例的属性。 引用Flex组件 为了在ActionScript中使用组件,我们一般要在MXML标签中给组件定义一个id属性。例如,下面的代码中,我们设置了Button控件的id属性为”myBu...

tanghuichuping的博客 168

flex 创建ActionScript组件

Flex那些事儿--创建ActionScript组件 创建ActionScript组件你可以用ActionScript创建可重用的组件然后在Flex程序中使用类似MXML标签来引用这些自定义的组件。这些自定义的组件包含了图形元素,自定义的业务逻辑,或者扩展已经存在的Flex组件。它们可以继承Flex中任意的有效的左

siy020513的专栏 1058

自定义的组件中加入多个MXML标记的子UI元素

http://www.munkiihouse.com/?p=37这篇文章讨论了如何在一个定制的组件中加入多个UI元素首先我们来看一下它定制的FORMITEM,单单看源代码,这个号称是FORMITEM的东西其实并没有从FORMITEM扩展,而是从HBOX扩展的,因此个人感觉是要装多少东西就装多少东西,看看作者在这故弄玄虚的背后到底要给我们讲解什么东西  FLEX不支持将子元件在多层水

The Way To Great 2961

如何创建FLEX自定义组件(1)

我经常看到这个话题——编写组件。通过这个例子,我将告诉你如何从零开始编写一个组件。我将要写几篇文章来探讨这个主题,在最后你就可以创建自己的组件了。我把自己选择的这个组件叫做循环选择按钮。这个组件的显示的是dataProvider 中的某条纪录和两个箭头组成的一个圆环。当你选择按钮的时候箭头就会旋转一点同时显示dataProvider 中的下一个值。你可以把它想象成一个没有下拉列表的ComboBox

影の聚宝盆 2451

Flex 3快速入门: 构建自定义组件 在ActionScript 中构建组件

本文来自:http://www.airia.cn/FLEX_Directory/building_components_in_as/ 可以使用ActionScript创建可重用的组件,并且在你的Flex程序中可以作为标签引用这个组件。在ActionScript中创建的组件能够包含图像元素,自定义业务逻辑,或者扩展已经存在的Flex组件。在ActionScript中,Flex组件实现了类

lihe111的专栏 2261

Flex 3在ActionScript 中构建自定义组件

可以使用ActionScript创建可重用的组件,并且在你的Flex程序中可以作为标签引用这个组件。在ActionScript中创建的组件能够包含图像元素,自定义业务逻辑,或者扩展已经存在的Flex组件。在ActionScript中,Flex组件实现了类层次结构。每一个组件,都是Action类的实例。所有Flex可视组件都是源自于UIComponent类。要创建自己的组件,你可以创建一

snowteng17的专栏 1684
上一篇: Flex企业应用开发实践学习笔记(五)-------组件失效机制
下一篇: Flex企业应用开发实践学习笔记(七)——Flex Application
spring19840513
博客等级 码龄18年 15粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值