自定义Spark组件

Flex3里面如果要自定义组件,一般首先继承一个flex3中的已有组件,然后覆盖createChildren方法,并在里面实例化你自己的东西。但是Flex4中的spark组件就有些不同了,因为spark组件把逻辑和皮肤分别放在不同的类里面,如Panel,你会发现有一个PanelSkin与之对应。

那么在Flex4中如何自定义自己的组件呢? 按如下步骤:
1)New 一个Mx Skin类并继承你需要的类,比如我的为MyPanelSkin继承自PanelSkin,Flash builder里面提供了new Mx Skin的选项,完成本步骤后,你会发行MyPanelSkin里面已经有PanelSkin里的所有代码了,现在你可以通过可视化或这代码来修改你的皮肤,比如给panel的顶部的右边加上一个最大化按钮,等等,你可以加你所需要的东西

2)在MyPanelSkin里给你的组件添加一个id
比如我将Spark Panel 里原来的titleDisplay改成了如下形式,即添加了自定义的东西
                <!-- layer 3: text -->
<!--- @copy spark.components.Panel#titleDisplay -->
<s:VGroup height="100%" width="100%">
<s:HGroup width="100%" horizontalAlign="center">
<s:Label id="titleDisplay" maxDisplayedLines="1" fontSize="18" fontFamily="宋体"
left="9" right="3" top="1" bottom="0" minHeight="30"
verticalAlign="middle" textAlign="start" fontWeight="bold">
</s:Label>
</s:HGroup>
<s:Spacer height="5"/>
<s:HGroup width="100%" verticalAlign="middle">
<mx:LinkButton id="btnPreviousDay" label="前一天" fontFamily="宋体"/>
<s:HGroup width="100%" horizontalAlign="center">
<s:ComboBox id="comboBoxMonth" width="60"/>
<s:VGroup paddingTop="3">
<mx:Label text="月" fontFamily="宋体"/>
</s:VGroup>
<s:ComboBox id="comboBoxDay" width="60"/>
<s:VGroup paddingTop="3">
<mx:Label text="日" fontFamily="宋体"/>
</s:VGroup>
<s:Spacer width="3"/>
<s:Button id="searchBtn" label="查看" fontFamily="宋体"/>
<s:Button id="backBtn" label="返回" fontFamily="宋体"/>
</s:HGroup>
<mx:LinkButton id="btnNextDay" label="后一天" fontFamily="宋体"/>
</s:HGroup>
<s:Spacer height="2"/>
</s:VGroup>



3)new 一个MyPanel继承自Spark Panel,并且在里面添加属性,[color=red]属性名字与MyPanelSkin的id的值保持一致[/color],这一点非常重要,一定要取一样的名字,
并且要给这些变量加上元数据,[SkinPart (required="false or true")],通过这些变量你就可以访问MyPanelSkin里面的元素了,当然必须完成第4步后,你才能访问。

4)按如下方式覆盖partAdd,在partAdd里面操作你的属性,你可以为这些属性所代表的组件添加事件监听器,或者赋初始值。
package view.component
{
import mx.collections.ArrayCollection;

import spark.components.ComboBox;
import spark.components.Panel;

public class MyPanel extends Panel
{
public function MyPanel()
{
super();
}

[SkinPart (required="false")]
public var comboBoxMonth:ComboBox

[SkinPart (required="false")]
public var comboBoxDay:ComboBox

override protected function partAdded(partName:String, instance:Object):void {
super.partAdded(partName, instance);
var monthProvider:ArrayCollection=new ArrayCollection();
var dayProvider:ArrayCollection=new ArrayCollection();

for(var i:int=1;i<=12;i++){
monthProvider.addItem(i);
}

for(var j:int=1;j<=31;j++){
dayProvider.addItem(j);
}
if (instance == comboBoxMonth) {
comboBoxMonth.dataProvider=monthProvider;

}else if(instance==comboBoxDay){
comboBoxDay.dataProvider=dayProvider;
}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值