收藏 分享(赏)

FLEX简明教程.doc

上传人:j35w19 文档编号:7052051 上传时间:2019-05-04 格式:DOC 页数:9 大小:307.50KB
下载 相关 举报
FLEX简明教程.doc_第1页
第1页 / 共9页
FLEX简明教程.doc_第2页
第2页 / 共9页
FLEX简明教程.doc_第3页
第3页 / 共9页
FLEX简明教程.doc_第4页
第4页 / 共9页
FLEX简明教程.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、FLEX 简明教程因为大家对 JAVA 都很熟悉,所以这个文档就是从 FLEX 和 JAVA 的一些比较来进行讲解,FLEX 的核心语言是 ActionScript,而 FLEX3 用到的相应是ActionScript3,所以这里学习 FLEX 其实就学习 ActionScript,因为我也是新手,有说得不正确的地方还希望大家指出来更正。1、基本数据类型和 JAVA 的区别ActionScript3 的常用基本类型大致有以下几个:int ,uint,Number,Boolean,String,这几个基本类型中,值得注意的是 Number 类型,它是 ActionScript3 中浮点型的数据,

2、相当于 JAVA 的 Long 和 Float 的集合。2、类和包的声明,导入包。ActionScript3 的类声明和导入包和 JAVA 是一样的,包声明和 C#类似,用一对大括号把类包围在 package 里面,下面声明一个 com.zhongrx 包下的一个 Test 类package com.zhongrximport flash.text.TextFieldType;public class Test3、修饰符ActionScript3 可用作类、属性、方法的常用修饰符有:public ,private,protected, internal,其中 public ,private 的

3、作用范围和 JAVA 是一样的,而 internal 则和 JAVA 的 default 一样(同一包中可访问) ,在没有指明修饰符时默认是 internal,值得注意的是 protected,它的作用范围比 JAVA 要小,JAVA 中 protected 可以被其及其子类和同一包中的对象访问,而ActionScript3 的 protected 却只能被其及其子类访问,外部不能访问。4、变量和函数声明的区别ActionScript3 中,函数和变量和 JAVASCRIPT 类似,变量声明格式如下:修饰符 var 变量名 : 变量类型,比如我声明一个类型为字符串的私有的变量 name,其结果

4、如下:private var name:String;函数的声明格式如下:修饰符 function 函数名():返回值类型 ,比如声明一个没有返回值,名为test 的公有函数,其结果如下:public function test():void值得注意的是无论是 ActionScript3 的属性和函数都可以声明为无类型,可以把上面的属性和函数声明修改成如下:private var name:*;public function test():*号代表无类型,意思是其类型声明的属性或者是方法的返回值可以在运行的过程中随意转换成其它类型。5、Object 对象和 JAVA 的区别ActionScri

5、pt3 和 JAVA 的所有类都是 Object 的派生类,但两者的区别还是蛮大的,JAVA 中,无论是 Object 对象还是一般的类对象,他们的属性是已定好了的,不能在运行的过程中为对象添加属性,而 FLEX 的 Object 却能够实现这一点,例如我们可以这样声明一个 Object 变量,然后给它加上属性:var ojb:Object = new Object();obj.name = “张三”;经过以上的赋值后,ojb 对象就多了一个值为“张三”的属性 name。6、函数的重写和重载ActionScript3 函数重写的规则和 JAVA 没有什么区别,唯一不同的是要在函数的修饰符前加一

6、个关键字:override,至于函数的重载,ActionScript3 是不支持的,它处理重载和 JAVASCRIPT 相似,例如有以下函数:public function test(name:String,age:int = 20):voidtrace(name);trace(age);那我们在调用这个函数的时候可以这样:对象.test(“张三”,100);/输出结果为:张三 100也可以这样:对象.test(“张三”); /输出结果为:张三 20意思是我们调用 test 函数时可以同时给两个参数,也可以只给一个,但要注意,前提是参数有默认值的时候才可以省略,例如 test 函数中的age

7、的默认值是 20,我们在调用 test 的时候可以不指定这个参数的值。7、MXML 的理解MXML 和 HTML 类似,以下是 MXML 的代码:页面里面有一个名为“确定的”按键,当点击它的时候会触发 click 事件,然后执行注册的 showMessage 函数,弹出一个对话框。效果和下面 HTML 一样:function test()alert(“确定”);其实在 FLEX 中,MXML 其实也是一个 ActionScript 类,只不过,用 MXML 来表示可以实现图形化而已,但相应的也付出了一些代价,用 MXML 来自定义组件和用 ActionScript 类比较,后者会更灵活,且 M

8、XML 是没有构造方法的。例如上面的,它的源代码就是一个 ActionScript 类,在 FLEX 中,我们自定义的类可以自己 NEW 出来加到容器中,也可以用标签的形式加到容器中。例如上面的 MXML 的代码我们也可以 NEW 一样 Button 出来,把它加到当前容器中,效果和上面是一样的,代码如下8、事件的生命周期ActionScript3 的事件是非常重要的,可以说是处处是事件,所有事件的父类是 Event,ActionScript3 事件可以按不同的事件源来分类,当然我们也可以自定义事件,只要继承 Event 就可以自定义自己的事件,Event 有两个比较常用的属性,一个是 cur

9、rentTarget,另一个是 target,两个属性都是指向事件源,它们的区别是:currentTarget 是指向当前捕捉此事件的组件,而 target 由始至终都是指向最初发起此事件的源,例如代码:当我们点击 Button 时就会触发鼠标的 click 事件,此时很明显触发该事件的事件源是 Button,但捕捉事件的组件是 Panel,所以 event 对象的currentTarget 是指 Panel,而 target 是指 Button,当然 Panel 要捕捉到Button 的事件是有前提的,Button 必须是 Panel 的子组件,以上代码中,如是 Button 是在 Pane

10、l 外面声明的话,当点击 Button 时,test 方法是不会执行的。上面是通过标签的形式捕捉事件,在 script 块中也可以添加一个监听器来捕捉,而且还可以注销监听器,在一定的程序上可以优化内存的使用,例如上面的代码可以改成这样也可以达到一样的效果:上面的代码中 panel.removeEventListener(MouseEvent.CLICK,test);是 删除 panel 对鼠标点击事件的监听,当执行到这句时,下一次鼠标再点击按键的时候,test 方法是不会执行了,上面代码中,这个标签我给了一个 id 的属性,值为 panel,其实意思就是相应于声明一个 Panel 类型的引用,

11、这样在 script 块中我们就可以直接用 panel 来执行 Panel 的一些功能了,而不会像 JAVASCRIPT 那样要getElementById()这么复杂来获取标签对象。事件的生命周期分三个阶段,分别是捕获、目标,冒泡,这三个阶段是从上而下的,以上面代码为例子,当我们点击 Button 时,首先事件是从 Application 流进来,然后经过 Panel,最终到达 Button,然后再由 Button 向上返回,经过Panel,然后到达 Application。在这过程中,从 Application 到 Panel 这个阶段称为捕获阶段,而流到 Button 时这个阶段称为目标

12、阶段,然后再由 Button 向上返回时称为冒泡阶段,我们可以在任何一个阶段去捕捉事件,比如我们要在捕获阶段捕捉事件,只要把panel.addEventListener(MouseEvent.CLICK,test);修改成panel.addEventListener(MouseEvent.CLICK,test,true);就可以了,第三个参数是指定捕获事件的阶段,默认为 false,意思是从目标阶段和冒泡阶段去捕捉事件。那我们可以捕捉事件,当然也可以分发事件,分发事件很容易,只要调用对象的 dispatchEvent(event:Event)方法就可以了,此方法接收一个 Event 对象的参数

13、,如下代码所示:以上代码中,我点“ABCD”按键去执行 dispatchEventTest 方法,然后dispatchEventTest 方法再利用 “事件测试”按键去分发鼠标单击事件,这样我们不用点击“事件测试”按键,Panel 也能监听到“事件测试”按键的单击事件,原因是我们在代码中主动去分发了“事件测试”按键的单击事件。9、回调数的应用用过 JAVASCRIPT 大家应该对回调函数也有一定的了解,ActionScript3的回调函数和 JAVASCRIPT 是一样的,例如上面的讲到事件监听中就用到回调函数,代码 panel.addEventListener(MouseEvent.CLIC

14、K,test);中,test 其实就是一个回函数,它指向 test 函数,其实我们可以把上面的代码简写成这样,以达到把 test 函数合并起来写:但是这样写的话往往会出现意想不到的结果,我查了一些资料是不推荐这样写的,其实我在做程序的过程中也遇到过这种情况,所以还是不推荐这种写法。10、 XML 的应用ActionScript3 读写 XML 是很方便的事情,感觉比 JAVA 方便多了,ActionScript3 有 XML 类,我们用多种方法实例化一个 XML 类:var xml:XML = new XML(“ 测试“);var xml:XML = new XML(测试);var xml:X

15、ML = 测试;以上三种方式的结果都是一样的。XML 的操作方式如下:一 、读取节点那我们要读取这个 XML 的 name 节点值时可以这样 xml.name,当我们要读取 name节点的属性 type 的值时,可以这样 xml.type。那当有很多个 name 节点时,我们还可以 xml.name0这样的方式去读取相应的的节点,如果节点名有特殊字符,比如var bookXml:XML = 测试我们也可以这样去读取相应的数据 xml“book-name”。二、修改节点值那如果要修改 XML 的节点值时,可以直接把值赋给节点对象,例如我要把 book-name 节点的值改成“FLEX 教程” ,

16、可以这样写 bookXml “book-name” = “FLEX教程”,值得注意的是不能把 XML 对象当值赋给节点,因为这样不是修改节点的值,而是重写节点对象了,例如我们如果这样写 bookXml “book-name” = 100,那 bookXml 就变成100 。三、添加节点如果我们要添加一个节点,可以调用 bookXml 的 appendChild()方法,例如 bookXml. appendChild(张三);这样 bookXml 的结果就变成测试张三四、删除节点删除一个节点可以这样 delete bookXml. author,执行这条语句后,bookXml 的结果就变成测试张

17、三11、 和 JAVA 交互的方式FLEX 和 JAVA 的交互方式有三种:WebService、 HTTPService、Remote Object。这三种方式我用的感觉,Remote Object 是最方便,而且效率是最高的一种,WebService的效率最低也最不方便。在交互不多的情况下,我们可以选择用HTTPService 这种方式,这种方式其实就像我们平常在 JSP 里面讲求服务端 STRUT 的 ACTION 一样,举个例子:上面的代码中,我们首准备好要发送的数据,这里我用 Oject 对象,因为它可以任意的加属性,很方便,当然如果我们没有数据发送到后台,也可以不声明。然后就是声明

18、了一个 HTTPService 对象,然后为对象添加一个请求成功后的监听器,接着就是为 HTTPService对象指明请求的地址、请求方式、发送的参数,最后调用HTTPService 的 send()方法就可以了,后台直接用 request().getParameter()就可以获取到相应的参数了,然后后台用 IO 的输出流把结果输出去,FLEX 的回调函数就会执行,回调函数的利用event.result 就可以获取到服务端的返回结果,其实这种和后台的交互方式和 AJAX 基本上是一样的,值得注意的是userLogin.resultFormat 这句代码,上面我是注释了的,这句的意思是预先设置

19、服务端返回数据的类型,它的值有三个可以选:Object,xml,text,默认是 object 如果我们后台输入的是 XML,那这里也要设置相应的返回格式,否则是得不到想要的结果。其实这里的 resultFormat 和 JQUERY 的 AJAX 对象的 dataType 属性意思是一样的。Remote Object 交互方式其实和 DWR 类似,也是利用反射机制,可以在客户端直接调用服务端的方法,ADOBE 公司为 Remote Object 交互提供了两个框架:LCDS 和 BlazeDS,前者是收费的,后者是免费的。BlazeDS 是 LCDS 的一个简化版。因为 BlazeDS 的

20、Remote Object 从项目的建立到配置需要很多讲解,这里我就不自己写了,找了两个文章,然后这里连接去看就好。12、 FLEX 的 CSSFLEX 支持 CSS,大部分的 CSS 和在 HTML 里面用是一样的。13、 动态类(dynamic class)其实我们前面提到的 Ojbect 类就是一个动态类,动态类的声明和普通类的区别是在前面多了一个 dynamic 修饰符。下面是一个例子:凡是声明为动态类的类,我们都可以在它运行的过程中为他添加属性,这个功能是我一直很喜欢的。14、 渲染器FLEX 为很多 LIST 类的组件都配置好了相应的渲染器,例如DataGrid,Tree 等,DataGrid 每个单元格,默认的渲染器是一个textInput,也就是相当于 HTML 的 TD 里有一个文本框:。如在 DataGrid 中我们要修改默认的渲染器,首先要实现 IFactory 接口,然后把渲染器赋给 DataGrid 的 itemRenderer 属性就可以,还有一个更方便的方式, 就是直接在 MXML 中给 itemRenderer 属性赋值就可以,代码如下:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报