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

FLEX 构建完美的带有CheckBox三状态的Tree控件

    博客分类:
  • flex
阅读更多
CheckTree.as
package ht.system.controls  
{  
    import mx.controls.Tree;  
    import mx.core.ClassFactory;  
    import mx.events.ListEvent;  
    /** 
     * 三状态复选框树控件 
     * <br /><br /> 
     */  
      
    public class CheckTree extends Tree  
    {  
        //数据源中状态字段  
        private var m_checkBoxStateField:String="@state";  
        //部分选中的填充色  
        [Bindable]  
        private var m_checkBoxBgColor:uint=0x009900;  
        //填充色的透明度  
        [Bindable]  
        private var m_checkBoxBgAlpha:Number=1;  
        //填充色的边距  
        [Bindable]  
        private var m_checkBoxBgPadding:Number=3;  
        //填充色的四角弧度  
        [Bindable]  
        private var m_checkBoxBgElips:Number=2;  
        //取消选择是否收回子项  
        [Bindable]  
        private var m_checkBoxCloseItemsOnUnCheck:Boolean=true;  
        //选择项时是否展开子项  
        [Bindable]  
        private var m_checkBoxOpenItemsOnCheck:Boolean=false;  
        //选择框左边距的偏移量  
        [Bindable]  
        private var m_checkBoxLeftGap:int=8;  
        //选择框右边距的偏移量  
        [Bindable]  
        private var m_checkBoxRightGap:int=20;  
        //是否显示三状态  
        [Bindable]  
        private var m_checkBoxEnableState:Boolean=true;  
        //与父项子项关联  
        [Bindable]  
        private var m_checkBoxCascadeOnCheck:Boolean=true;  
  
  
        //双击项目  
        public var itemDClickSelect:Boolean=true;  
  
        public function CheckTree()  
        {  
            super();  
            doubleClickEnabled=true;  
        }  
  
        override protected function createChildren():void  
        {  
            var myFactory:ClassFactory=new ClassFactory(CheckTreeRenderer);  
            this.itemRenderer=myFactory;  
            super.createChildren();  
            addEventListener(ListEvent.ITEM_DOUBLE_CLICK, onItemDClick);  
        }  
        public function PropertyChange():void  
        {  
            dispatchEvent(new ListEvent(mx.events.ListEvent.CHANGE));  
        }  
  
  
        /** 
         * 树菜单,双击事件 
         * @param evt 双击事件源 
         * 
         */  
        public function onItemDClick(e:ListEvent):void  
        {  
            if(itemDClickSelect)  
                OpenItems();  
        }  
  
        /** 
         * 打开Tree节点函数,被 有打开节点功能的函数调用 
         * @param item  要打开的节点 
         * 
         */  
        public function OpenItems():void  
        {  
            if (this.selectedIndex >= 0 && this.dataDescriptor.isBranch(this.selectedItem))  
                this.expandItem(this.selectedItem, !this.isItemOpen(this.selectedItem), true);  
        }  
          
        /** 
         * 数据源中状态字段 
         * @return  
         *  
         */       
        [Bindable]  
        public function get checkBoxStateField():String  
        {  
            return m_checkBoxStateField;  
        }  
        public function set checkBoxStateField(v:String):void  
        {  
            m_checkBoxStateField=v;  
            PropertyChange();  
        }  
          
        /** 
         * 部分选中的填充色 
         * @return  
         *  
         */       
        [Bindable]  
        public function get checkBoxBgColor():uint  
        {  
            return m_checkBoxBgColor;  
        }  
        public function set checkBoxBgColor(v:uint):void  
        {  
            m_checkBoxBgColor=v;  
            PropertyChange();  
        }  
          
        /** 
         * 填充色的透明度 
         * @return  
         *  
         */       
        [Bindable]  
        public function get checkBoxBgAlpha():Number  
        {  
            return m_checkBoxBgAlpha;  
        }  
        public function set checkBoxBgAlpha(v:Number):void  
        {  
            m_checkBoxBgAlpha=v;  
            PropertyChange();  
        }  
          
          
        /** 
         * 填充色的边距 
         * @return  
         *  
         */       
        [Bindable]  
        public function get checkBoxBgPadding():Number  
        {  
            return m_checkBoxBgPadding;  
        }  
        public function set checkBoxBgPadding(v:Number):void  
        {  
            m_checkBoxBgPadding=v;  
            PropertyChange();  
        }  
          
        /** 
         * 填充色的四角弧度 
         * @return  
         *  
         */       
        [Bindable]  
        public function get checkBoxBgElips():Number  
        {  
            return m_checkBoxBgElips;  
        }  
        public function set checkBoxBgElips(v:Number):void  
        {  
            m_checkBoxBgElips=v;  
            PropertyChange();  
        }  
          
          
        /** 
         * 取消选择是否收回子项 
         * @return  
         *  
         */       
        [Bindable]  
        public function get checkBoxCloseItemsOnUnCheck():Boolean  
        {  
            return m_checkBoxCloseItemsOnUnCheck;  
        }  
        public function set checkBoxCloseItemsOnUnCheck(v:Boolean):void  
        {  
            m_checkBoxCloseItemsOnUnCheck=v;  
            PropertyChange();  
        }  
          
          
        /** 
         * 选择项时是否展开子项 
         * @return  
         *  
         */       
        [Bindable]  
        public function get checkBoxOpenItemsOnCheck():Boolean  
        {  
            return m_checkBoxOpenItemsOnCheck;  
        }  
        public function set checkBoxOpenItemsOnCheck(v:Boolean):void  
        {  
            m_checkBoxOpenItemsOnCheck=v;  
            PropertyChange();  
        }  
          
          
        /** 
         * 选择框左边距的偏移量 
         * @return  
         *  
         */       
        [Bindable]  
        public function get checkBoxLeftGap():int  
        {  
            return m_checkBoxLeftGap;  
        }  
        public function set checkBoxLeftGap(v:int):void  
        {  
            m_checkBoxLeftGap=v;  
            PropertyChange();  
        }  
          
          
        /** 
         * 选择框右边距的偏移量 
         * @return  
         *  
         */       
        [Bindable]  
        public function get checkBoxRightGap():int  
        {  
            return m_checkBoxRightGap;  
        }  
        public function set checkBoxRightGap(v:int):void  
        {  
            m_checkBoxRightGap=v;  
            PropertyChange();  
        }  
          
          
        /** 
         * 是否显示三状态 
         * @return  
         *  
         */       
        [Bindable]  
        public function get checkBoxEnableState():Boolean  
        {  
            return m_checkBoxEnableState;  
        }  
        public function set checkBoxEnableState(v:Boolean):void  
        {  
            m_checkBoxEnableState=v;  
            PropertyChange();  
        }  
          
          
          
        /** 
         * 与父项子项关联 
         * @return  
         *  
         */  
        [Bindable]  
        public function get checkBoxCascadeOnCheck():Boolean  
        {  
            return m_checkBoxCascadeOnCheck;  
        }  
        public function set checkBoxCascadeOnCheck(v:Boolean):void  
        {  
            m_checkBoxCascadeOnCheck=v;  
            PropertyChange();  
        }  
          
    }  
}  

CheckTreeRenderer.as
package ht.system.controls  
{  
    import <a title="<a title="<a title="<a title="Flash" href="http://" target="_blank">Flash</a>" href="http://" mce_href="../../undefined/" target="_blank">Flash</a>" href="http://" mce_href="../../undefined/" target="_blank">Flash</a>" href="http://" mce_href="../../undefined/" target="_blank">Flash</a>.events.MouseEvent;  
    import <a title="<a title="<a title="<a title="Flash" href="http://" target="_blank">Flash</a>" href="http://" mce_href="../../undefined/" target="_blank">Flash</a>" href="http://" mce_href="../../undefined/" target="_blank">Flash</a>" href="http://" mce_href="../../undefined/" target="_blank">Flash</a>.geom.Rectangle;  
    import <a title="<a title="<a title="<a title="Flash" href="http://" target="_blank">Flash</a>" href="http://" mce_href="../../undefined/" target="_blank">Flash</a>" href="http://" mce_href="../../undefined/" target="_blank">Flash</a>" href="http://" mce_href="../../undefined/" target="_blank">Flash</a>.xml.*;  
      
    import mx.collections.*;  
    import mx.controls.CheckBox;  
    import mx.controls.Tree;  
    import mx.controls.listClasses.*;  
    import mx.controls.treeClasses.*;  
    import mx.events.FlexEvent;  
    import mx.events.ListEvent;  
  
    /** 
     * 三状态复选框树控件 
     *  <br /><br /> 
     */   
    public class CheckTreeRenderer extends TreeItemRenderer  
    {  
        protected var myCheckBox:CheckBox;  
        /** 
         * STATE_SCHRODINGER : 部分子项选中 <br /> 
         * STATE_CHECKED :     全部子项选中 <br /> 
         * STATE_UNCHECKED :   全部子项未选中 <br /> 
         */  
        static private var STATE_SCHRODINGER:int=2;  
        static private var STATE_CHECKED:int=1;  
        static private var STATE_UNCHECKED:int=0;  
  
        private var myTree:CheckTree;  
  
        public function CheckTreeRenderer()  
        {  
            super();  
            mouseEnabled=true;  
  
        }  
  
        /** 
         * 初始化完成时处理复选框和图片对象 
         * 
         */  
        override protected function createChildren():void  
        {  
            myCheckBox=new CheckBox();  
            addChild(myCheckBox);  
            myCheckBox.addEventListener(MouseEvent.CLICK, checkBoxToggleHandler);  
              
            myTree = this.owner as CheckTree;  
              
            super.createChildren();  
              
            myTree.addEventListener(ListEvent.CHANGE,onPropertyChange);  
              
        }  
        protected function onPropertyChange(e:ListEvent=null):void  
        {  
            this.updateDisplayList(unscaledWidth,unscaledHeight);  
        }  
        /** 
         * // TODO : 递归设置父项目的状态 
         * @param item 项目 
         * @param tree 树对象 
         * @param state 目标状态 
         * 
         */  
        private function toggleParents(item:Object, tree:Tree, state:int):void  
        {  
            if (item == null)  
                return ;  
            else  
            {  
                var stateField:String=myTree.checkBoxStateField;  
                var tmpTree:IList=myTree.dataProvider as IList;  
                var oldValue:Number=item[stateField] as Number;  
                var newValue:Number=state as Number;  
                  
                item[myTree.checkBoxStateField]=state;  
                tmpTree.itemUpdated(item,stateField,oldValue,newValue);  
                  
                //item[myTree.checkBoxStateField]=state;  
                var parentItem:Object=tree.getParentItem(item);  
                if(null!=parentItem)  
                    toggleParents(parentItem, tree, getState(tree, parentItem));  
            }  
        }  
  
        /** 
         * // TODO : 设置项目的状态和子项的状态 
         * @param item 项目 
         * @param tree 树对象 
         * @param state 目标状态 
         * 
         */  
        private function toggleChildren(item:Object, tree:Tree, state:int):void  
        {  
            if (item == null)  
                return ;  
            else  
            {  
                var stateField:String=myTree.checkBoxStateField;  
                var tmpTree:IList=myTree.dataProvider as IList;  
                var oldValue:Number=item[stateField] as Number;  
                var newValue:Number=state as Number;  
                  
                item[myTree.checkBoxStateField]=state;  
                tmpTree.itemUpdated(item,stateField,oldValue,newValue);  
                  
                var treeData:ITreeDataDescriptor=tree.dataDescriptor;  
                if (myTree.checkBoxCascadeOnCheck && treeData.hasChildren(item))  
                {  
                    var children:ICollectionView=treeData.getChildren(item);  
                    var cursor:IViewCursor=children.createCursor();  
                    while(!cursor.afterLast)  
                    {  
                        toggleChildren(cursor.current, tree, state);  
                        cursor.moveNext();  
                    }  
                }  
            }  
        }  
  
        /** 
         * //TODO:获得parent的状态 
         * @param tree 树对象 
         * @param parent 目标项 
         * @return 状态 
         * 
         */  
        private function getState(tree:Tree, parent:Object):int  
        {  
            var noChecks:int=0;  
            var noCats:int=0;  
            var noUnChecks:int=0;  
            if (parent != null)  
            {  
                var treeData:ITreeDataDescriptor=tree.dataDescriptor;  
                var cursor:IViewCursor=treeData.getChildren(parent).createCursor();  
                while(!cursor.afterLast)  
                {  
                    if (cursor.current[myTree.checkBoxStateField] == STATE_CHECKED)  
                        noChecks++;  
                    else if (cursor.current[myTree.checkBoxStateField] == STATE_UNCHECKED)  
                        noUnChecks++;  
                    else  
                        noCats++;  
                    cursor.moveNext();  
                }  
            }  
  
            if ((noChecks > 0 && noUnChecks > 0) || noCats > 0)  
                return STATE_SCHRODINGER;  
            else if (noChecks > 0)  
                return STATE_CHECKED;  
            else  
                return STATE_UNCHECKED;  
        }  
  
        /** 
         * //TODO:设置项目的父项状态和子项状态 
         * @param event 事件 
         * 
         */  
        private function checkBoxToggleHandler(event:MouseEvent):void  
        {  
            if (data)  
            {  
                var myListData:TreeListData=TreeListData(this.listData);  
                var selectedNode:Object=myListData.item;  
                myTree=myListData.owner as CheckTree;  
                var toggle:Boolean=myCheckBox.selected;  
                if (toggle)  
                {  
                    toggleChildren(data, myTree, STATE_CHECKED);  
                    if (myTree.checkBoxOpenItemsOnCheck)  
                        myTree.expandChildrenOf(data, true);  
                }  
                else  
                {  
                    toggleChildren(data, myTree, STATE_UNCHECKED);  
                    if (myTree.checkBoxCloseItemsOnUnCheck)  
                        myTree.expandChildrenOf(data, false);  
                }  
                //TODO:如果所有子项选中时需要选中父项则执行以下代码  
                if (myTree.checkBoxCascadeOnCheck)  
                {  
                    var parent:Object=myTree.getParentItem(data);  
                    if(null!=parent)  
                        toggleParents(parent, myTree, getState(myTree, parent));  
                }  
            }  
            //myTree.PropertyChange();  
            //dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));  
        }  
  
        /** 
         * 设置本项的复选框状态 
         * @param checkBox 复选框 
         * @param value 
         * @param state 状态 
         * 
         */  
        private function setCheckState(checkBox:CheckBox, value:Object, state:int):void  
        {  
            if (state == STATE_CHECKED)  
                checkBox.selected=true;  
            else if (state == STATE_UNCHECKED)  
                checkBox.selected=false;  
            else if (state == STATE_SCHRODINGER)  
                checkBox.selected=false;  
        }  
  
        override public function set data(value:Object):void  
        {  
            if (value != null)  
            {  
                super.data=value;  
                setCheckState(myCheckBox, value, value[myTree.checkBoxStateField]);  
            }  
        }  
        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void  
        {  
            super.updateDisplayList(unscaledWidth, unscaledHeight);  
            if (super.data)  
            {  
                if (super.icon != null)  
                {  
                    myCheckBox.x=super.icon.x + myTree.checkBoxLeftGap;  
                    myCheckBox.y=(height - myCheckBox.height) / 2;  
                    super.icon.x=myCheckBox.x + myCheckBox.width + myTree.checkBoxRightGap;  
                    super.label.x=super.icon.x + super.icon.width + 3;  
                }  
                else  
                {  
                    myCheckBox.x=super.label.x + myTree.checkBoxLeftGap;  
                    myCheckBox.y=(height - myCheckBox.height) / 2;  
                    super.label.x=myCheckBox.x + myCheckBox.width + myTree.checkBoxRightGap;  
                }  
                  
                setCheckState(myCheckBox, data, data[myTree.checkBoxStateField]);  
                if (myTree.checkBoxEnableState && data[myTree.checkBoxStateField] == STATE_SCHRODINGER)  
                {  
                    fillCheckBox(true);  
                    trace(myTree.checkBoxEnableState);  
                    trace(data[myTree.checkBoxStateField]);  
                }  
                else  
                    fillCheckBox(false);  
            }  
        }  
  
        protected function fillCheckBox(isFill:Boolean):void  
        {  
            myCheckBox.graphics.clear();  
  
            if (isFill)  
            {  
                var myRect:Rectangle=getCheckTreeBgRect(myTree.checkBoxBgPadding);  
                myCheckBox.graphics.beginFill(myTree.checkBoxBgColor, myTree.checkBoxBgAlpha)  
                myCheckBox.graphics.drawRoundRect(myRect.x, myRect.y, myRect.width, myRect.height, myTree.checkBoxBgElips, myTree.checkBoxBgElips);  
                myCheckBox.graphics.endFill();  
            }  
        }  
  
        protected function getCheckTreeBgRect(checkTreeBgPadding:Number):Rectangle  
        {  
            var myRect:Rectangle=myCheckBox.getBounds(myCheckBox);  
            myRect.top+=checkTreeBgPadding;  
            myRect.left+=checkTreeBgPadding;  
            myRect.bottom-=checkTreeBgPadding;  
            myRect.right-=checkTreeBgPadding;  
            return myRect;  
        }  
  
  
    } //end class  
} //end package  

test
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"  
                xmlns:ns1="controls.*"  
                fontSize="12"  
                xmlns:controls="ht.system.controls.*"  
                 creationComplete="initApp()"  
                layout="horizontal" xmlns:ns2="flexlib.controls.*" xmlns:ns3="flexlib.containers.*" xmlns:ns4="ht.charts.controls.*" xmlns:ns5="ht.machine.views.*">  
    <mx:Script>  
        <!--[CDATA[  
            import mx.collections.*;  
            import ht.system.controls.*;  
  
            import mx.collections.ArrayCollection;  
            [Bindable]  
            public var arrarc:ArrayCollection=new ArrayCollection([  
                {state:0,label:"有效值"},  
                {state:0,label:"平均值"},  
                {state:0,label:"峰值"},  
                {state:0,label:"峰峰值"},  
                {state:0,label:"X1"},  
                {state:2,label:"频带",  
                    children:[  
                        {state:0, label:"频带1"},  
                        {state:1, label:"频带2"},  
                        {state:0, label:"频带3"},  
                        {state:0, label:"频带4"},  
                        {state:0, label:"频带5"},  
                    ]  
                }  
                ]);  
  
            [Bindable]  
            public var folderList:XMLList=  
                <>  
                    <folder state="0" label="Marketing Collateral">  
                        <folder state="0" label="Media,PR,and Communications" >  
                            <folder state="0" label="Article Reprint Disclaimers" />  
                            <folder state="0" label="Articles Reprints" />  
                            <folder state="0" label="Interviews and Transcripts" />  
                            <folder state="0" label="Press Kits" />  
                            <folder state="0" label="Press Releases" />  
                            <folder state="0" label="Quick Hits" />  
                            <folder state="0" label="Rep Talking Points" />  
                            <folder state="0" label="Special Updates" />  
                            <folder state="0" label="White Papers" />  
                        </folder>  
                        <folder state="0" label="Forms and Applications" >  
                            <folder state="0" label="Applications" />  
                            <folder state="0" label="Forms" />  
                        </folder>  
                    </folder>  
                </>  
            ;  
            [Bindable]  
            public var folderCollection:XMLListCollection;  
  
            override protected function initializationComplete():void  
            {  
                super.initializationComplete();  
                folderCollection=new XMLListCollection(folderList);  
            }  
            protected function initApp():void  
            {  
                this.callLater(test);  
            }  
            protected function test():void  
            {  
                        tree3.checkBoxOpenItemsOnCheck=true;  
                        tree3.checkBoxCascadeOnCheck=true;  
                        tree3.checkBoxEnableState=false;  
                        tree3.itemDClickSelect=true;  
                          
                        tree2.checkBoxOpenItemsOnCheck=true;  
                        tree2.checkBoxCascadeOnCheck=true;  
                        tree2.checkBoxEnableState=true;  
                        tree2.checkBoxBgColor=0x000000;  
            }  
        ]]-->  
    </mx:Script>  
    <mx:Panel width="166" height="100%" layout="absolute">  
        <mx:Form x="0" y="0" width="146" height="100%">  
            <mx:CheckBox label="取消收回子项" id="checkBoxCloseItemsOnUnCheck" selected="true"/>  
            <mx:CheckBox label="选中展开子项" id="checkBoxOpenItemsOnCheck"/>  
            <mx:CheckBox label="是否三状态" id="checkBoxEnableState" selected="true"/>  
            <mx:CheckBox label="是否关联父子" id="checkBoxCascadeOnCheck" selected="true"/>  
            <mx:FormItem label="样式" direction="vertical">  
                <mx:ColorPicker id="checkBoxBgColor" selectedColor="#009900"/>  
                <mx:HSlider width="61" id="checkBoxBgAlpha" allowTrackClick="true" minimum="0" maximum="1" snapInterval="0.1" value="1"/>  
            </mx:FormItem>  
            <mx:FormItem label="填充边距">  
                <mx:NumericStepper id="checkBoxBgPadding" value="3" minimum="0" maximum="6" stepSize="1"/>  
            </mx:FormItem>  
            <mx:FormItem label="填充弧度">  
                <mx:NumericStepper id="checkBoxBgElips" value="2" minimum="0" maximum="6" stepSize="1"/>  
            </mx:FormItem>  
            <mx:FormItem label="左边距">  
                <mx:NumericStepper id="checkBoxLeftGap" value="8" minimum="0" maximum="20" stepSize="1"/>  
            </mx:FormItem>  
            <mx:FormItem label="右边距">  
                <mx:NumericStepper id="checkBoxRightGap" value="20" minimum="0" maximum="40" stepSize="1"/>  
            </mx:FormItem>  
            <mx:CheckBox label="双击是否展开项" id="itemDClickSelect" selected="true"/>  
        </mx:Form>  
        <mx:ControlBar height="46" y="321">  
            <mx:ToggleButtonBar>  
              
    <mx:dataProvider>  
        <mx:Array>  
            <mx:String>Flash</mx:String>  
            <mx:String>Director</mx:String>  
            <mx:String>Dreamweaver</mx:String>  
            <mx:String>ColdFusion</mx:String>  
        </mx:Array>  
    </mx:dataProvider></mx:ToggleButtonBar>  
        </mx:ControlBar>  
    </mx:Panel>  
  
  
  
    <controls:CheckTree id="tree1" checkBoxStateField="@state" labelField="@label" dataProvider="{folderCollection}" width="100%" height="100%"  
                        checkBoxCloseItemsOnUnCheck="{checkBoxCloseItemsOnUnCheck.selected}"  
                        checkBoxOpenItemsOnCheck="{checkBoxOpenItemsOnCheck.selected}"  
                        checkBoxEnableState="{checkBoxEnableState.selected}"  
                        checkBoxCascadeOnCheck="{checkBoxCascadeOnCheck.selected}"  
                        checkBoxBgColor="{checkBoxBgColor.selectedColor}"  
                        checkBoxBgAlpha="{checkBoxBgAlpha.value}"  
                        checkBoxBgPadding="{checkBoxBgPadding.value}"  
                        checkBoxBgElips="{checkBoxBgElips.value}"  
                        checkBoxLeftGap="{checkBoxLeftGap.value}"  
                        checkBoxRightGap="{checkBoxRightGap.value}"  
                        itemDClickSelect="{itemDClickSelect.selected}"  
                        />  
    <controls:CheckTree id="tree2"   
                        width="100%"  
                        labelField="label"  
                        checkBoxStateField="state"  
                        dataProvider="{arrarc}"  
                        height="100%"/>  
    <controls:CheckTree id="tree3"  
                        width="100%"  
                        labelField="label"  
                        checkBoxStateField="state"  
                        dataProvider="{arrarc}"  
                        height="100%"/>  
</mx:Application>

转自:http://blog.csdn.net/cjy37/archive/2009/05/11/4166621.aspx
  • 大小: 56.1 KB
分享到:
评论
5 楼 zlbdexiaohao 2015-07-21  
怎么去掉默认的图标,
folderClosedIcon="undefined"
folderOpenIcon="undefined"
不管用
4 楼 zlbdexiaohao 2015-07-20  
看不懂看不懂
3 楼 cjy37 2010-05-15  
请楼主注明转帖的网站、作者、网址,否则请删除!!!!!
2 楼 jjxboy 2010-02-25  
楼长,能不能给个可以下载的实例啊?谢谢了!
1 楼 shijian0306 2009-12-28  
需要可下载的实例,图片打不开。。。

相关推荐

    Flex4的Tree控件加CheckBox

    如果应用有多个Tree控件或者需要在其他地方反映Tree的选择状态,需要实现一种机制来同步这些状态。这可能涉及到事件广播或者使用Observer模式。 7. **优化用户体验**: 可能还需要考虑一些用户体验的细节,例如...

    flex带复选框的tree,flex checkboxtree

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

    Flex Tree 中Checkbox

    在“Flex Tree 中Checkbox”的场景下,我们主要讨论如何在Flex Tree组件中集成Checkbox,以及如何通过Checkbox来获取用户的选中状态。 1. **Flex Tree组件**:Flex Tree是MXML和ActionScript中的一个控件,用于显示...

    flex Tree checkbox 修改过后的

    标题提到的“flex Tree checkbox 修改过后”,意味着原生的Flex Tree控件已经进行了自定义修改,以适应带有复选框功能的需求。 在Flex中实现Tree与Checkbox结合的关键点包括: 1. **创建自定义TreeItemRenderer**...

    flex checkboxtree复选树形下拉框

    在Flex开发中,"flex checkboxtree复选树形下拉框"是一种常见的用户界面组件,它结合了树形结构和复选框的功能,允许用户在层次结构中进行多选操作。这种组件通常用于数据筛选、配置设置或者层级分类的选择场景。在...

    flex中tree和checkbox结合使用的插件

    在Flex开发中,Tree组件和Checkbox控件的结合使用是一个常见的需求,特别是在构建具有层级结构并需要用户进行多选操作的界面时。本插件专为此目的设计,它允许用户在树形结构中通过复选框来选择或取消选择节点,从而...

    构造flex3.5的带复选框的树(CheckBoxTree)

    在Flex 3.5开发中,我们经常遇到需要创建具有交互性和可视复杂性的用户界面,其中一个常见的需求就是构建一个带有复选框的树形结构,也就是所谓的“复选框树”(CheckBoxTree)。这样的控件允许用户通过复选框来选择或...

    flex Tree 复选框。

    TreeItemRenderer是用于渲染Tree组件中每个节点的类,我们可以在此类中添加一个CheckBox控件,并根据节点的状态来控制它的选中状态。以下是一个基本的自定义TreeItemRenderer的代码片段: ```actionscript public ...

    CheckBoxTree.zip

    在Flex开发中,CheckBoxTree是一种常用的UI组件,它结合了树形结构和复选框功能,使得用户可以方便地对树节点进行多选操作。在本文中,我们将深入探讨如何在Flex中实现CheckBoxTree,以及相关的关键技术点。 首先,...

    flex tree 中渲染checkBox

    `flex tree 中渲染checkBox`这个话题涉及到在Flex Tree组件的每个节点上添加复选框控件,使得用户能够通过单击复选框来选择或取消选择树的特定部分。这在数据分层展示和多选操作的场景中特别常见,例如文件管理器或...

    flex 中tree渲染checkbox

    在TreeChkItemRenderer类中,我们需要监听CheckBox的change事件,当用户点击复选框时更新对应数据节点的selected属性,并且可能需要通知Tree组件进行状态同步: ```actionscript chkBox.addEventListener(Event....

    flex tree checkbox

    在Flex中,Tree组件是一个非常实用的控件,它允许用户以树状结构展示数据,便于层级关系的管理和操作。而当我们谈论"flex tree checkbox"时,这意味着我们要在Tree组件的节点上添加复选框,使得用户可以对每个节点...

    Flex Checkbox Tree

    在Flex中,`Tree`组件是展示层次结构数据的标准控件,而`Checkbox`则是一个用户可以选择或取消选择的图形元素。将两者结合,我们就得到了`Flex Checkbox Tree`。这个组件的核心在于自定义渲染器,因为默认的`Tree`...

    Flex combox

    这个Flex Combox的特点在于,其下拉部分以树形结构展示,每个节点都可以带有复选框。这种设计允许用户选择多个树形结构中的条目,非常适合用于层级关系的数据选择,如组织结构、地区分类或者产品分类等。 首先,...

    FLex文档教程

    而Flex程序文件扩展名为.mxml,本质上是一种带有大量特殊元素的XML文件,用于定义界面布局和组件属性。 **三、使用MXML组件构建用户界面** MXML语言支持多种用户界面组件,主要分为控件和容器两大类: 1. **控件*...

    Flex课程学习(附带源码)

    Button、CheckBox、ColorPicker、DataGrid、DateField、HSlider、HorizontalList、Image、LinkButton Label、List MumericStepper、PopUpButton、ProgressBar、RadioButton、RichTextEditor、Text、TextArea、...

    Flex教程Flex教程

    ### Flex教程:深入理解Flex构建动态用户界面 #### 概述 Flex是一种强大的技术栈,专为构建丰富互联网应用程序(RIA)而设计。它结合了MXML(一种基于XML的标记语言)、ActionScript(一种ECMAScript兼容的、强类型...

    Flex的组件

    CheckboxTree是一种特殊的树形控件,它结合了复选框和树结构,允许用户以图形化的方式选择或取消选择树形数据结构中的节点。这种组件在数据层级关系复杂,需要用户进行多选操作时非常有用,常见于文件管理器、组织...

    flex4 下拉框可以多选 CheckBoxTreeComboBox

    `CheckBoxTreeComboBox`是Flex4中一个自定义组件,它结合了`Tree`和`ComboBox`两种控件的特点。通常,`ComboBox`是一个下拉列表,用户可以从预设的选项中选择一个;而`Tree`则呈现了一个层次结构的数据视图,用户...

Global site tag (gtag.js) - Google Analytics