Flex自定义组件

使用MXML标签定义

主文件Main1.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:MyComp="*" layout="vertical">
  <mx:Style>
    Application{fontSize:14px;}
  </mx:Style>
  <MyComp:MyComp1/>
</mx:Application>


注:xmlns:MyComp="*"自定义命名空间其实很类似于包的概念用来管理组件的。实际当中最好把自己的组件文件分文件夹管理。

组件定义MyComp1.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
  <mx:Script>
    <![CDATA[
      import mx.controls.ComboBox;
      import mx.controls.Alert;
      import mx.events.DropdownEvent;
      private function closeHandler(event:DropdownEvent):void
      {
        //Alert.show((event.currentTarget as ComboBox).selectedLabel);
        Alert.show((event.currentTarget as ComboBox).selectedItem.toString());
      }
    ]]>
  </mx:Script>
  <mx:Label text="城市:" />
        <mx:ComboBox close="closeHandler(event);">
                <mx:dataProvider>        
                        <mx:String>济南</mx:String>
                        <mx:String>威海</mx:String>
                        <mx:String>烟台</mx:String>
                </mx:dataProvider>
        </mx:ComboBox>  
</mx:HBox>


注:组件的文件名就对应着将来使用时的mxml标签名,根标签就是你用来扩展的父类,这里是HBox。在里面this引用的是你的组件类。

使用AS3定义

组件定义MyComp2.as

package mycomp
{
  import flash.events.KeyboardEvent;
  
  import mx.controls.TextArea;

  public class MyComp2 extends TextArea
  {
    public function MyComp2()
    {
      super();
      addEventListener(KeyboardEvent.KEY_DOWN,handleKeyDown);
    }
    private function handleKeyDown(evt:KeyboardEvent):void
    {
      if(evt.ctrlKey && evt.keyCode==90)
      text="";
    }
    
  }
}


注意类名和文件名同,同时包结构也要和目录结构一致。

扩展了TextArea添加了一个事件处理,用户按Ctrl+Z时会清空文本框。

主文件Main2.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:MyComp="mycomp.*" layout="vertical">
  <mx:Style>
    MyComp2{fontSize:14px;}
  </mx:Style>
  <MyComp:MyComp2 id="myTxt" color="#008800" text="这是一段测试用的文本..." />
</mx:Application>


注意名字空间mycomp.*这里很像import mycomp.*;呵呵。

 

注:
我们也可以不改变名字,人采用原来的,如下TextArea.as:



主文件:

<? xml version ="1.0" encoding ="utf-8" ?>
< mx:Application xmlns:mx ="http://www.adobe.com/2006/mxml" xmlns:MyComp ="mycomp.*" layout ="vertical" >
   < mx:Style >
    TextArea{fontSize:14px;}
   </ mx:Style >
   < MyComp:TextArea id ="myTxt" color ="#008800" text ="这是一段测试用的文本..." />
   < mx:TextArea text ="这是系统默认的文本框" />
</ mx:Application >

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值