`

flex4 分组框(转帖)

    博客分类:
  • flex
阅读更多
http://www.iteye.com/topic/773679

分组框(Group Box)是围绕在一组相关控件周围的带标签的矩形边框。它提供了一种通过视觉展示控件关系
的方法。如下图所示:


本文将通过以下几步来实现:
一、继承SkinnableContainer,创建组件类GroupBox。
二、声明外观部件titleDisplay用来显示组合框的标题。
三、增加title属性。
四、覆盖partAdded方法,使标题字符串能够作用于外观部件titleDisplay。
五、创建它的默认外观(皮肤)GroupBoxSkin。
六、为GroupBox增加必要样式。
---------------
一、继承SkinnableContainer,创建组件类GroupBox。
Actionscript 3.0代码
public class GroupBox extends SkinnableContainer 

public function GroupBox() 

  super(); 




二、声明外观部件titleDisplay用来显示组合框的标题。
Actionscript 3.0代码
[SkinPart(required="false")] 
public var titleDisplay:TextBase; 


三、增加title属性。

Actionscript 3.0代码
private var _title:String = ""; 
[Bindable] 
public function get title():String  

return _title; 

public function set title(value:String):void  

_title = value; 
  
if (titleDisplay) 
  titleDisplay.text = title; 


四、覆盖partAdded方法,使标题字符串能够作用于外观部件titleDisplay。
Actionscript 3.0代码
override protected function partAdded(partName:String, instance:Object):void 

super.partAdded(partName, instance); 
  
if (instance == titleDisplay) 

  titleDisplay.text = title; 



至此,GroupBox组件类基本创建完成,但是还不能显示。下面来创建它的默认外观(皮肤)GroupBoxSkin。
五、创建它的默认外观(皮肤)GroupBoxSkin。
第一步,创建组合框的边框。
Actionscript 3.0代码
<!-- 边框 --> 
<s:Rect id="border" left="0" right="0" top="10" bottom="0"  
  radiusX="4" radiusY="4" 
  > 
<s:stroke> 
  <s:SolidColorStroke id="borderStroke" weight="1"/> 
</s:stroke> 
</s:Rect> 

第二步,创建外观部件titleDisplay。
Mxml代码
<!-- 标题 --> 
<s:Label id="titleDisplay" 
   maxDisplayedLines="1" 
   left="9" top="0" 
   minHeight="20" 
   verticalAlign="middle"  
   textAlign="start"/> 

第三步,创建外观部件contentGroup,用于包含组合框的内容。
Mxml代码
<!-- 内容区域 --> 
<s:Group id="contentGroup" 
   left="5" right="5" top="21" bottom="5"> 
<s:layout> 
  <s:VerticalLayout/> 
</s:layout> 
</s:Group>   

注意,此时边框是一个闭合的矩形。


图2
从上图,可以看出现在组合框的标题文字与边框是重叠的,显然这不符合我们的要求。
为了解决这个问题,下面要为边框创建一个遮罩。

Mxml代码
<!-- 边框遮罩 --> 
<s:Group id="borderGroupMask" left="0" right="0" top="0" bottom="0"> 
  <s:Rect left="0" width="7" top="0" bottom="0"> 
   <s:fill> 
    <s:SolidColor color="#ff0000" alpha="1"/> 
   </s:fill> 
  </s:Rect> 
  <s:Rect left="7" width="{titleDisplay.width+4}" top="30" bottom="0"> 
   <s:fill> 
    <s:SolidColor color="#ff0000" alpha="1"/> 
   </s:fill> 
  </s:Rect> 
  <s:Rect left="{titleDisplay.width+11}" width="100%" top="0" bottom="0"> 
   <s:fill> 
    <s:SolidColor color="#ff0000" alpha="1"/> 
   </s:fill> 
  </s:Rect> 
</s:Group> 


为<s:Rect id="border"/>增加属性:mask="{borderGroupMask}"。
六、为GroupBox增加必要样式。
第一步,在GroupBox类中增加以下样式声明,它们用来指定边框的颜色和圆角。
增加borderColor样式。
Actionscript 3.0代码
[Style(name="borderColor", type="uint", format="Color", inherit="no", theme="spark")] 
[Style(name="cornerRadius", type="Number", format="Length", inherit="no", theme="spark")] 
第二步,在GroupBoxSkin中覆盖updateDisplayList,把样式应用于外观。


Actionscript 3.0代码
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 

  var cr:Number = getStyle("cornerRadius"); 
  if (cornerRadius != cr) 
  { 
   cornerRadius = cr; // 取变量 
   border.topLeftRadiusX = cornerRadius; 
   border.topRightRadiusX = cornerRadius; 
   border.bottomLeftRadiusX = cornerRadius; 
   border.bottomRightRadiusX = cornerRadius; 
  } 
   
  borderStroke.color = getStyle("borderColor"); 
  borderStroke.alpha = getStyle("borderAlpha"); 
  // 
  super.updateDisplayList(unscaledWidth, unscaledHeight); 


至此所有工作完成。效果如下:

图3
完整的文件如下:
1 GroupBox.as
Actionscript 3.0代码
package jx.components 

    import spark.components.SkinnableContainer; 
    import spark.components.supportClasses.TextBase; 
    /** 
     *  The alpha of the border for this component. 
     * 
     *  @default 0.5 
     *  
     *  @langversion 3.0 
     *  @playerversion Flash 10 
     *  @playerversion AIR 1.5 
     *  @productversion Flex 4 
     */ 
    [Style(name="borderAlpha", type="Number", inherit="no", theme="spark")] 
     
    /** 
     *  The color of the border for this component. 
     * 
     *  @default 0 
     *  
     *  @langversion 3.0 
     *  @playerversion Flash 10 
     *  @playerversion AIR 1.5 
     *  @productversion Flex 4 
     */ 
    [Style(name="borderColor", type="uint", format="Color", inherit="no", theme="spark")] 
    /** 
     *  The radius of the corners for this component. 
     * 
     *  @default 5 
     *  
     *  @langversion 3.0 
     *  @playerversion Flash 10 
     *  @playerversion AIR 1.5 
     *  @productversion Flex 4 
     */ 
    [Style(name="cornerRadius", type="Number", format="Length", inherit="no", theme="spark")] 
     
    public class GroupBox extends SkinnableContainer 
    { 
        public function GroupBox() 
        { 
            super(); 
        } 
        //---------------------------------- 
        //  titleField 
        //----------------------------------  
         
        [SkinPart(required="false")] 
         
        /** 
         *  定义容器中标题文本的外观的外观部件。 
         * 
         *  @see jx.skins.GroupBoxSkin 
         *   
         *  @langversion 3.0 
         *  @playerversion Flash 10 
         *  @playerversion AIR 1.5 
         *  @productversion Flex 4 
         */ 
        public var titleDisplay:TextBase; 
         
         
        //---------------------------------- 
        //  title 
        //---------------------------------- 
         
        /** 
         *  @private 
         */ 
        private var _title:String = ""; 
         
        /** 
         *  @private 
         */ 
        private var titleChanged:Boolean; 
         
        [Bindable] 
         
        /** 
         *  标题或者说明。 
         *  @default "" 
         *  @langversion 3.0 
         *  @playerversion Flash 10 
         *  @playerversion AIR 1.5 
         *  @productversion Flex 4 
         */ 
        public function get title():String  
        { 
            return _title; 
        } 
         
        /** 
         *  @private 
         */ 
        public function set title(value:String):void  
        { 
            _title = value; 
             
            if (titleDisplay) 
                titleDisplay.text = title; 
        } 
        override protected function partAdded(partName:String, instance:Object):void 
        { 
            super.partAdded(partName, instance); 
             
            if (instance == titleDisplay) 
            { 
                titleDisplay.text = title; 
            } 
        }        
    } 


2 GroupBoxSkin.mxml
Mxml代码
<?xml version="1.0" encoding="utf-8"?> 
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009"  
        xmlns:mx="library://ns.adobe.com/flex/mx"  
        xmlns:s="library://ns.adobe.com/flex/spark"  
        xmlns:fb="http://ns.adobe.com/flashbuilder/2009"  
        alpha.disabled="0.5"> 
    <fx:Metadata> 
        [HostComponent("jx.components.GroupBox")] 
    </fx:Metadata>  
     
    <fx:Script fb:purpose="styling"> 
        static private const exclusions:Array = ["titleDisplay", "contentGroup"]; 
         
        /** 
         * @private 
         */   
        override public function get colorizeExclusions():Array { 
            return exclusions; 
        } 
         
        /** 
         * @private 
         */ 
        override protected function initializationComplete():void 
        { 
            useChromeColor = true; 
            super.initializationComplete(); 
        } 
        private var cornerRadius:Number;         
        /** 
         * @private 
         */ 
        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 
        { 
            var cr:Number = getStyle("cornerRadius"); 
            if (cornerRadius != cr) 
            { 
                cornerRadius = cr;  // 取变量 
                border.topLeftRadiusX = cornerRadius; 
                border.topRightRadiusX = cornerRadius; 
                border.bottomLeftRadiusX = cornerRadius; 
                border.bottomRightRadiusX = cornerRadius; 
            } 
             
            borderStroke.color = getStyle("borderColor"); 
            borderStroke.alpha = getStyle("borderAlpha"); 
            // 
            super.updateDisplayList(unscaledWidth, unscaledHeight); 
        } 
    </fx:Script> 
     
    <s:states> 
        <s:State name="normal" /> 
        <s:State name="disabled" /> 
    </s:states> 
    <!-- 边框遮罩 --> 
    <s:Group id="borderGroupMask" left="0" right="0" top="0" bottom="0"> 
        <s:Rect left="0" width="7" top="0" bottom="0"> 
            <s:fill> 
                <s:SolidColor color="#ff0000" alpha="1"/> 
            </s:fill> 
        </s:Rect> 
        <s:Rect left="7" width="{titleDisplay.width+4}" top="30" bottom="0"> 
            <s:fill> 
                <s:SolidColor color="#ff0000" alpha="1"/> 
            </s:fill> 
        </s:Rect> 
        <s:Rect left="{titleDisplay.width+11}" width="100%" top="0" bottom="0"> 
            <s:fill> 
                <s:SolidColor color="#ff0000" alpha="1"/> 
            </s:fill> 
        </s:Rect> 
    </s:Group> 
    <!-- 边框 --> 
    <s:Rect id="border" left="0" right="0" top="10" bottom="0"  
            radiusX="4" radiusY="4" 
            mask="{borderGroupMask}" 
            ><!--mask="{borderGroupMask}"--> 
        <s:stroke> 
            <s:SolidColorStroke id="borderStroke" weight="1"/> 
        </s:stroke> 
    </s:Rect> 
    <!-- 标题 --> 
    <s:Label id="titleDisplay" 
             maxDisplayedLines="1" 
             left="9" top="0" 
             minHeight="20" 
             verticalAlign="middle"  
             textAlign="start"/> 
    <!-- 内容区域 --> 
    <s:Group id="contentGroup" 
             left="5" right="5" top="21" bottom="5"> 
        <s:layout> 
            <s:VerticalLayout/> 
        </s:layout> 
    </s:Group>         
</s:SparkSkin> 

3 GroupBoxExam.mxml 实例文件
Mxml代码
<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"  
               xmlns:s="library://ns.adobe.com/flex/spark"  
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:components="jx.components.*"> 
    <s:layout> 
        <s:BasicLayout/> 
    </s:layout> 
    <fx:Declarations> 
    </fx:Declarations> 
    <components:GroupBox skinClass="jx.skins.GroupBoxSkin" title="用户配置文件" cornerRadius="5"> 
        <components:layout> 
            <s:HorizontalLayout/> 
        </components:layout> 
        <s:Button/> 
        <s:Button/> 
        <s:Button/> 
    </components:GroupBox> 
</s:Application> 


4 css 可以通过css为GroupBox指定样式的默认值。
Css代码
@namespace components "jx.components.*"; 
components|GroupBox { 
    skinClass: ClassReference("jx.skins.GroupBoxSkin"); 
    cornerRadius: 5; 
    borderColor: #104778; 
    borderWeight: 1; 
    dropShadowVisible: false; 
分享到:
评论

相关推荐

    flex_4框架类_关系图

    标题:"flex_4框架类_关系图" 描述:"flex_4框架类_关系图,官方文档,参考资料",这份文档提供了Adobe Flex 4框架中各类组件之间的关系图表,旨在帮助开发者更好地理解Flex 4框架的架构与设计模式,以及各组件间的...

    flex实现边框

    本篇文章将详细解释如何使用Flex来实现边框以及添加标题,并重点关注在标题框中显示文本的实现方法。 首先,我们需要了解Flex中的容器和组件。容器是Flex应用程序的基础,它们可以包含一个或多个组件,如按钮、文本...

    flex 智能提示框

    Flex智能提示框是一种在用户输入时提供实时建议的交互元素,常见于搜索框或自动完成字段,能够极大地提升用户体验。这种技术主要应用于Flex框架中,它是一个基于Adobe AIR和Flash Player运行时的开源开发平台,用于...

    spring+mybatis+flex4框架组合,适合初学者

    Spring、MyBatis和Flex4是三个在软件开发领域中广泛应用的框架,它们各自负责不同的技术层面,而将它们组合起来可以构建出高效且用户体验良好的Web应用。下面将详细介绍这三个框架以及它们如何协同工作。 首先,...

    flex框架之Cairngorm框架(一)

    flex框架之Cairngorm框架,包括Cairngorm框架

    Flex3+ssh框架

    4. 在Eclipse中,通过菜单路径`Window -&gt; Preferences -&gt; Flex -&gt; Installed Flex SDKs`,更新Flex SDKs 2.0和3.0的路径,确保指向正确的安装位置,然后点击`Apply`保存设置。 Flex+J2EE项目的搭建涉及以下步骤: ...

    flex4 实战 flex4 in action

    《Flex 4 实战:Flex 4 in Action》是一本深度探讨Adobe Flex 4开发的实战书籍,由T. Ahmed, D. Orlando, J. C. Bland 和 J. Hooks合著。这本书不仅提供了理论知识,还包含了丰富的实战案例,旨在帮助读者熟练掌握...

    FLEX4_Flex4教程 - FLEX4从入门到精通,挺不错的值得一看

    Flex4,全称为Adobe Flex 4,是Adobe公司推出的一款用于构建富互联网应用程序(Rich Internet Applications,RIAs)的框架。这个框架基于ActionScript 3.0编程语言和Flash Player或Adobe AIR运行时环境,为开发者...

    flex开发框架

    4. **Flex Component Kit**:一组预定义的UI组件,如按钮、文本输入框、列表等,这些组件可以快速构建出丰富的用户界面。 5. **Flex Framework**:包含了事件处理、数据绑定、动画效果、网络通信等功能的库。 6. *...

    Flex开发框架

    4. **Flex Builder**: Adobe还提供了集成开发环境(IDE)——Flex Builder(现已被Adobe Flash Builder取代),它基于Eclipse平台,提供了代码编辑、调试、性能优化等众多功能,极大地提升了开发效率。 5. **Flex...

    Flex 4 高级编程 Flex 4 高级编程

    Flex 4,全称为Adobe Flex 4,是Adobe公司推出的一种用于构建富互联网应用程序(RIA)的开源框架,主要基于ActionScript和MXML语言。它提供了丰富的用户界面组件和强大的数据处理能力,使得开发者能够创建出具有高度...

    Flex 4的十大变化

    Flex 4,也被称为Gumbo,是Adobe Flex框架的一个重大更新,它引入了许多关键变化以提升RIA(Rich Internet Applications)的开发效率和用户体验。以下是Flex 4中的十大变化的详细说明: 1. **Adobe Catalyst集成**...

    Flex4 一学就会 (Hello Flex4)

    Flex4,全称为Adobe Flex 4,是一款由Adobe公司开发的开源框架,主要用于构建富互联网应用程序(Rich Internet Applications,简称RIA)。Flex4以其强大的组件库、灵活的样式系统和优化的图形渲染引擎,极大地提升了...

    Flex实现带复选框的列表树

    4. 数据绑定:在Flex中,数据绑定是一种强大的机制,可以将视图组件的状态与模型数据自动保持同步。例如,我们可以通过数据绑定将复选框的状态与树节点的数据对象中的某个属性关联,从而实现节点选择状态的动态更新...

    Flex4权威指南源代码

    《Flex4权威指南》是一本深入探讨Adobe Flex 4开发技术的专业书籍,其源代码提供了丰富的实例和示例,帮助读者更好地理解和应用Flex 4框架。Flex 4,也称为Flash Builder 4,是Adobe公司推出的一个强大的RIA(Rich ...

    flex带复选框的tree,flex checkboxtree

    在Flex中,Tree组件是用于显示层次结构数据的控件,而"flex带复选框的tree"(Flex CheckboxTree)则是对Tree组件的一种扩展,增加了复选框功能,用户可以对树形结构的节点进行选择或全选操作,常用于权限管理、配置...

    flex4 学习全部资料

    Flex4是一种强大的富互联网应用程序(RIA)开发框架,由Adobe公司推出,主要用于构建交互性强、视觉效果丰富的Web应用。在本资源包中,你将找到关于Flex4学习的所有必要资料,包括安装指南、API文档、学习文档以及...

    Flex4实战代码

    Flex4,全称为Adobe Flex 4,是Adobe公司推出的一款用于构建富互联网应用程序(RIA)的框架,基于ActionScript 3.0编程语言和Flash Player或Adobe AIR运行时环境。这个压缩包文件包含了多个章节的实战代码,涵盖了...

    flex-menu.rar_Flex 4_Menu_flex_flex Menu_flex 菜单

    Flex 4 是Adobe Flex框架的一个重要版本,它在2009年发布,极大地提升了开发富互联网应用程序(RIA)的能力。这个"flex-menu.rar"压缩包包含了一个使用Flex 4构建的菜单组件,专为Flash Builder 4设计。Flash ...

    Flex4开发实践PPT

    Flex4,全称为Adobe Flex 4,是Adobe公司推出的一款强大的富互联网应用程序(RIA)开发框架,主要用于构建具有丰富用户体验的Web应用。本PPT详细讲述了Flex4的开发实践,旨在帮助开发者从基础到实践全面掌握这一技术...

Global site tag (gtag.js) - Google Analytics