`
wangyisong
  • 浏览: 238167 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

跟我StepByStep学FLEX教程------Demo6之自定义事件&自定义组件

    博客分类:
  • FLEX
阅读更多

跟我StepByStep学FLEX教程------Demo6之自定义事件&自定义组件

 

 

说明:该文系作者原创,请勿商用或者用于论文发表,转载必须经作者同意并且注明出处。

 

 

      从这一讲开始,FLEX教程也从初级部分到中级了,Demo的复杂度也相应增加。

      简单的回顾一下初级部分,这一部分对Flex的概念以及开发工具进行了介绍,结合具体的DEMO对MXML和AS3的基础语法进行了讲解。这一部分内容希望读者对Flex有一个基础的认识,并且能够进行简单的应用开发。

     

       OK,这一讲的Demo以自定义事件和自定义组件为主题。 

       同样的,先看运行效果:

 

  

      代码结构如下:


 

      源代码如下:

自定义事件类MyCustomEvent.as:

package com.obj
{
 import flash.events.Event;
 
 public class MyCustomEvent extends Event
 {
  public static const TESTMYEVENT:String="testMyEvent"; //使用常量定义事件的触发方式名称
  public var userLog:UserLogin;
  
  public function MyCustomEvent(userLogin:UserLogin, type:String)
  {
   super(type);
   this.userLog=userLogin;
  }  
 }
}

用户登录类UserLogin.as:

package com.obj
{
 public class UserLogin
 {
  public var logUserNam:String=""; //用户名
  public var logUserPass:String=""; //用户密码
  public var logCompanyNam:String=""; //公司名称
  
  public function UserLogin(userNam:String, userPass:String, companyNam:String)
  {
   this.logUserNam=userNam;
   this.logUserPass=userPass;
   this.logCompanyNam=companyNam;
  }

 }
}

自定义组件SysLoginWin.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="594" height="274" backgroundColor="#0327D9" backgroundAlpha="0.39" creationComplete="init()">
 <mx:Script>
  <![CDATA[
   import com.obj.UserLogin;
      import mx.controls.Alert;
   import com.obj.MyCustomEvent;
   
   private function init():void
   {
    VeriCodeLab.text = generVeriCode();
   }
   
   private function generVeriCode():String
   {
    var ranNum:Number;
    var seedNum:Number;
    var tmpCode:String;
    var veriCode:String="";
    
    for(var i:int=0; i<4; i++)
    {
     ......

    }
    return veriCode;

   }

   internal function login(evt:MouseEvent):void {
    var userLogin:UserLogin = new UserLogin(logTxt.text, passTxt.text, sysInfoArea.text);
    var myTestEvent:MyCustomEvent = new MyCustomEvent(userLogin, MyCustomEvent.TESTMYEVENT);
    
    this.dispatchEvent(myTestEvent); //自定义事件加到事件流
   }      
  ]]>
 </mx:Script>
 
 <mx:Metadata>
  //声明事件注册通道的方法。name是事件对应的名称,也就是type。name一定要和事件类中的名称一致
        [Event(name="testMyEvent", type="com.obj.MyCustomEvent")]
 </mx:Metadata>
 
 <mx:Label x="42.5" y="31" text="用户名:" fontSize="15" fontWeight="bold"/>
 <mx:Label x="42.5" y="72" text="密   码:" fontSize="15" fontWeight="bold"/>
 <mx:TextInput x="126.5" y="31" id="logTxt" fontSize="12"/>
 <mx:TextInput x="126.5" y="73" displayAsPassword="true" id="passTxt" maxChars="8" width="160" fontSize="12"/>
 <mx:Button x="42.5" y="153" label="登陆" fontSize="16" fontWeight="bold" fontStyle="italic" id="logBtn" click="login(event)"/>
 <mx:Button x="220.5" y="153" label="帮助" fontSize="16" fontStyle="italic"/>
 <mx:Panel x="322.5" y="31" width="222" height="150" layout="absolute" title="系统公告" fontSize="15" horizontalAlign="center">
  <mx:TextArea x="0" y="0" width="202" height="104" text="五一劳动节放假3天    2009.5.1---2009.5.3" color="#030303" backgroundColor="#EF09C6" backgroundAlpha="0.27" id="sysInfoArea" maxChars="100" editable="false" wordWrap="true"/>
 </mx:Panel>
 <mx:Label x="102.25" y="219" text="XXX System XXX Company" width="399.5" fontSize="26" color="#0AE5F3" fontWeight="bold"/>
 <mx:Label x="42.5" y="111" text="验证码:" fontSize="15" fontWeight="bold"/>
 <mx:Label x="126" y="108" width="160.5" fontSize="19" fontFamily="Times New Roman" color="#FB07D6" id="VeriCodeLab" enabled="true" fontWeight="bold"/>
</mx:Canvas>

 

     可以在Components的Custom看见自定义组件了:


 

 主程序测试自定义事件TestMyEventMain.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%" xmlns:ns1="myComponents.*" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#E4F70C, #15A015]">
 <mx:Script>
  <![CDATA[
   import mx.controls.Alert;
   import com.obj.MyCustomEvent;
   import mx.events.CloseEvent;
   
   private function loginHandler(event:MyCustomEvent):void {
    var useNam:String=event.userLog.logUserNam;
    var usePass:String=event.userLog.logUserPass;
    
    Alert.okLabel="确定";
    
    if (useNam=="wangyisong"){ //注意,字符串比较相等用==,和Java区别
     if (usePass=="12345678") {
      Alert.show("用户'" + event.userLog.logUserNam + "'登录","登录信息",Alert.OK,this);
     } else {
      Alert.show("密码不正确!")
     }
    } else {
     Alert.show("无效用户!")
    }    
   }
  ]]>
 </mx:Script>
 
 <mx:Panel x="34" y="22" width="630" height="332" layout="absolute" id="mainMenu">
     <!--testMyEvent就是SysLoginWin控件注册的事件-->
  <ns1:SysLoginWin x="-0.5" y="-1" width="610.5" height="293" testMyEvent="loginHandler(event)" backgroundColor="#E1610B" backgroundAlpha="0.5">
  </ns1:SysLoginWin>
 </mx:Panel>
</mx:Application>

     

      通过代码很容易明白,使用AS3方式的事件Event机制,可以将大部分功能抽象为自定义控件,达到代码的高度复用和系统的可扩展性。

      下一讲对这个Demo进行一下简单讲解。

      从这一讲开始,FLEX教程的内容和Demo比以前的复杂度会高一些------教程StepByStep,读者通过初级阶段的学习,这一阶段也就很容易了。

      如果对DEMO或者讲述的不明白或有疑义的,请在评论中描述,作者尽量一一回复,由于工作关系,没有及时回复,提前请您见谅。

 

  • 大小: 10.8 KB
  • 大小: 6.7 KB
  • 大小: 25.3 KB
分享到:
评论
3 楼 LoveJavaMM 2014-04-24  
[color=red][/color]

为什么我的自定义组建不出来呢  for 里面的 .... 出错是什么原因呢
2 楼 偶尔玩玩 2011-07-14  
网上找的生成噪点验证码的方法
转载自http://hi.baidu.com/lq01/blog/item/be6bcc956a916252d0135e20.html
private function generVeriCode():String
			{
				//初始化
				var ran:Number;
				var number:Number;
				var code:String;
				var checkCode:String="";
				//生成四位随机数
				for(var i:int=0; i < 4; i++){
					//Math.random生成数为类似为0.1234
					ran=Math.random();
					number=Math.round(ran * 10000);
					//如果是2的倍数生成一个数字
					if (number % 2 == 0){
					//"0"的ASCII码是48
						code=String.fromCharCode(48 + (number % 10));
					}else{
						//生成一个字母
						//"A"的ASCII码为65
						code=String.fromCharCode(65 + (number % 26));
					}
					checkCode+=code;
					//绘制躁点
					VeriCodeLab.graphics.clear();
					var c:int=checkCode.length * 10;
					for(var j:int=0; j < c; j++){
						var x:int=Math.random() * VeriCodeLab.width;
						var y:int=Math.random() * VeriCodeLab.height;
						VeriCodeLab.graphics.lineStyle(1, 0x7C929D);
						VeriCodeLab.graphics.drawRect(x, y, .5, .5);
					}
				}
				return checkCode;
			}
1 楼 ActiveGary 2009-08-03  
写的很不错,如果能解释的更加详细点就好了

相关推荐

    跟我StepByStep学FLEX教程------王一松

    Demo6:自定义事件&自定义组件 - **自定义事件**:了解如何创建自定义事件类以及如何分发这些事件。 - **自定义组件**:教授如何扩展Flex内置组件或从头开始创建新组件。 #### 13. Demo7:页面跳转 - **导航架构...

    跟我StepByStep学FLEX教程-王一松.pdf

    8. 自定义事件和组件:Flex允许开发者创建自定义事件,以响应特定的操作或条件。同时,也可以开发自定义组件,以扩展现有的组件集合或创建特定的UI元素。 9. 页面跳转:在开发多页面应用程序时,页面跳转是基本需求...

    跟我StepByStep学FLEX教程.pdf

    跟我StepByStep学FLEX教程.pdf 跟我StepByStep学FLEX教程.pdf 跟我StepByStep学FLEX教程.pdf 跟我StepByStep学FLEX教程.pdf 跟我StepByStep学FLEX教程.pdf

    跟我StepByStep学FLEX教程 flex教程

    Flex教程详解:逐步掌握动态富互联网应用开发 Flex是由Adobe公司推出的一种用于构建富互联网应用程序(RIA)的技术,它基于ActionScript编程语言和MXML标记语言。本教程旨在引导学习者一步步深入理解Flex,帮助他们...

    跟我StepByStep学FLEX

    根据给定的信息,我们可以将《跟我StepByStep学FLEX》这本教程的主要知识点概括如下: ### FLEX基础 #### 概述 - **FLEX介绍**:FLEX是一种用于构建跨平台桌面应用程序和移动设备应用程序的技术。它结合了HTML、...

    StepByStep学FLEX教程.pdf

    - **自定义组件**:除了内置组件外,开发者还可以根据需求创建自定义组件。这部分会教授如何定义自己的组件并封装成库供以后使用。 #### 五、综合案例 - **页面跳转**:Flex支持复杂的导航逻辑,本节将通过实际...

    FLEX教程码源集合

    2. **跟我StepByStep学FLEX教程------王一松.pdf**:这是一本面向初学者的教程,由王一松编著。通过逐步的教学方式,讲解了Flex的基础知识,包括环境搭建、界面设计、事件处理、数据绑定等内容。适合没有FLEX背景的...

    flex-超好的flex学习资料

    《跟我StepByStep学FLEX教程》是由王一松编写的,旨在通过一系列深入浅出的示例,帮助读者从零开始掌握Flex的各项技术要点,从而能够独立开发出功能丰富、交互流畅的应用程序。 一、Flex入门与环境搭建 在《跟我...

    安装算量(实例体验)入门教程(StepByStep)---消防报警篇(2)知识.pdf

    《安装算量(实例体验)入门教程(StepByStep)---消防报警篇(2)》是一份关于建筑电气安装算量的详细指南,主要讲解了消防报警系统的布线与识别布置过程,以及工程图的分层管理。以下是教程中涉及的关键知识点: 1. **...

    安装算量(实例体验)入门教程(StepByStep)---消防水篇借鉴.pdf

    《安装算量(实例体验)入门教程(StepByStep)---消防水篇借鉴》 本文主要介绍了使用金格软件进行安装工程量计算的入门教程,特别是针对消防水系统的计算。教程分为七个章节,旨在帮助初学者逐步理解并掌握专业安装算...

    安装算量(实例体验)入门教程(StepByStep)---消防报警篇(2).pdf

    《安装算量(实例体验)入门教程(StepByStep)---消防报警篇(2)》是一份详尽的教程,旨在帮助初学者掌握安装算量软件的使用,特别是在消防报警系统的回路识别与布置方面。以下是对教程内容的详细解析: 在消防报警系统...

Global site tag (gtag.js) - Google Analytics