Flex4_Tree组件2(添加多选框、修改树图标)

1、新建AS类,用于为Tree生成复选框,及一些选择事件。

package com.th.myUtils
{
    import flash.events.Event;
    import flash.events.MouseEvent;

    import mx.controls.Alert;
    import mx.controls.CheckBox;
    import mx.controls.Tree;
    import mx.controls.treeClasses.TreeItemRenderer;
    import mx.controls.treeClasses.TreeListData;

    /**
     * 支持CheckBox的TreeItemRenderer
     * @author Montage
     */
    public class TreeCheckBoxRenderer extends TreeItemRenderer
    {
        public function TreeCheckBoxRenderer()
        {
            super();
        }

        /**
         * 表示CheckBox控件从data中所取数据的字段
         */        

        protected var checkBox:CheckBox;

        /**
         * 构建CheckBox
         */
        override protected function createChildren():void
        {
            super.createChildren();
            checkBox = new CheckBox();
            addChild( checkBox );
            checkBox.addEventListener(Event.CHANGE, changeHandler);
        }

        /**
         * 点击checkbox时,更新dataProvider
         * @param event
         */
        protected function changeHandler( event:Event ):void
        {
            //var i:int=0;
            if( [email protected]!="" )
            {
                [email protected]= checkBox.selected.toString();

                /**
                 * 如果有需要,在这里处理选中父,全选子节点的方法。
                 * */
                for (var i:int=0;i<data.children().length();i++)
                {
                    data.children()[i][email protected]=checkBox.selected.toString();;

                }     

            }
        } 

        /**
         * 初始化控件时, 给checkbox赋值
         */
        override protected function commitProperties():void
        {
            super.commitProperties();
            if([email protected]!="" )
            {
                if([email protected]=="true"){
                    checkBox.selected=true;
                }else{
                    checkBox.selected=false;
                }
            }
            else
            {
                checkBox.selected = false;
            }

        }

        /**
         * 重置itemRenderer的宽度
         */
        override protected function measure():void
        {
            super.measure();
            measuredWidth += checkBox.getExplicitOrMeasuredWidth();
        }

        /**
         * 重新排列位置, 将label后移
         * @param unscaledWidth
         * @param unscaledHeight
         */
        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
        {
            super.updateDisplayList(unscaledWidth, unscaledHeight);
            var startx:Number = data ? TreeListData( listData ).indent : 0;

            if (disclosureIcon)
            {
                disclosureIcon.x = startx;

                startx = disclosureIcon.x + disclosureIcon.width;

                disclosureIcon.setActualSize(disclosureIcon.width,
                    disclosureIcon.height);

                disclosureIcon.visible = data ?
                    TreeListData( listData ).hasChildren :
                    false;
            }

            if (icon)
            {
                icon.x = startx;
                startx = icon.x + icon.measuredWidth;
                icon.setActualSize(icon.measuredWidth, icon.measuredHeight);
            }

            checkBox.move(startx, ( unscaledHeight - checkBox.height ) / 2 );

            label.x = startx + checkBox.getExplicitOrMeasuredWidth();
        }
    }
}

2、Flex页面代码

<?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">
    <fx:Declarations>

    </fx:Declarations>
    <fx:Style>
        @namespace s "library://ns.adobe.com/flex/spark";
        @namespace mx "library://ns.adobe.com/flex/mx";
        mx|Tree{
            /*去掉默认文件夹图标*/
            folderClosedIcon: ClassReference(null);
            folderOpenIcon: ClassReference(null);

            /*去掉叶子节点图标*/
            defaultLeafIcon: ClassReference(null);

            /*
                defaultLeafIcon    指定叶图标
                disclosureClosedIcon    指定的图标旁边显示一个封闭的分支节点。默认的图标是一个黑色三角形。
                disclosureOpenIcon    指定的图标旁边显示一个开放的分支节点。默认的图标是一个黑色三角形。
                folderClosedIcon    关闭指定的文件夹图标的一个分支节点。
                folderOpenIcon    指定打开的文件夹图标的一个分支节点。
                例:三角图标修改如下代码使用即可换成自己的了:
                disclosureOpenIcon:Embed(source=‘images/a.png‘);
                disclosureClosedIcon:Embed(source=‘images/b.png‘);
            */
        }

    </fx:Style>

    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
            [Bindable]
            private var studetXml:XML=
                <nj label="一年级" id="n1" lx="0" selected="false">
                    <bj label="1班" id="b1" lx="1" selected="false">
                         <student label="刘备" id="s1" lx="2" selected="false"/>
                         <student label="张飞" id="s2" lx="2" selected="false"/>
                        <student label="关羽" id="s3" lx="2" selected="false"/>
                        <student label="诸葛亮" id="s4" lx="2" selected="false"/>
                     <student label="貂蝉" id="s5" lx="2" selected="false"/>
                     <student label="吕布" id="s6" lx="2" selected="false"/>
                    </bj>
                </nj>;
            private function treeChangeHandle(event:Event):void{
                var selectedTreeNode:XML;
                selectedTreeNode=Tree(event.target).selectedItem as XML;
            }

            private function test():void{
                txtAr.text=getSelectedChild(studetXml);
            }

            private function getSelectedChild(xml:XML):String{
                var result:String="";
                for(var i:int=0;i<xml.children().length();i++){
                    if((xml.children()[i][email protected]=="true") && (xml.children()[i][email protected]=="2")){
                        result+=xml.children()[i][email protected]+"\n";
                    }
                    var oxml:XML=new XML(xml.children()[i].toString());
                    if(oxml.children().length()>0){
                        result+=getSelectedChild(oxml);
                    }
                }
                return result;
            }
        ]]>
    </fx:Script>

    <s:Panel x="28" y="20" width="250" height="412" title="所有学生">
        <mx:Tree id="tree" top="0" left="0" width="100%" height="100%" labelField="@label"
                 itemRenderer="com.th.myUtils.TreeCheckBoxRenderer" dataProvider="{studetXml}"
                  change="treeChangeHandle(event)" styleName="Tree">
        </mx:Tree>
    </s:Panel>
    <s:Panel x="286" y="20" width="250" height="412" title="选中的学生">
        <s:TextArea id="txtAr" top="0" left="0" width="100%" height="100%"/>
    </s:Panel>
    <s:Button x="28" y="454" label="添加选中" click="test()"/>

</s:Application>

3、效果图:

Flex4_Tree组件2(添加多选框、修改树图标)

时间: 2024-11-04 15:00:12

Flex4_Tree组件2(添加多选框、修改树图标)的相关文章

Flex4_Tree组件1(添加、删除、展开、关闭、右键菜单)

1.屏蔽系统菜单:工程目录“html-template”文件夹-->“index.template.html”文件中,在var params = {};语句下添加新语句:        params.wmode = "opaque"; 2.新建Tree右键菜单工具类:TreeRightClickManager.as package com.th.rightClickManager { import flash.display.InteractiveObject; import f

组合框里添加复选框的方法(使用勾选的假象,用图片代替而已,并非QT原生支持)

组合框可以看作是列表框和文本框的组合,因其占据的空间少,使用操作方便,常被界面设计人员用于界面开发设计中,在有限个输入的条件下,组合框常用来代替文本框,这样从用户使用角度来看,更趋人性化,所见即所得.然好的控件永远敢不上应用的步伐,有时常规控件并不能满足应用的需要,经常需要在现有的控件上做扩展.有些应用需要在组合框的列表框的每一项前加复选框,以便可以控制列表框每一项的状态(选中还是未选中),显然现有的组合框(列表框+文本框的组合)不能满足应用要求.那么怎么得到一个超强组合框(列表框+文本框+复选

QListWidget的QComboBox下拉列表添加复选框及消息处理

要在QComboBox下拉列表项中添加复选框,并进行消息处理,在网上搜索了很久没有找到太多有用的信息和实际的例子,但从中还是找到了一些提示性的资料,根据这些简短的介绍,最终实现了这个功能. QComboBox有一个setView的方法,因此,可以自定义的一个视图类,将复选框在视图中实现,本例自定义视图类继承于QListWidget,因为在该视图类中,有一个setItemWidget方法,可以直接将QCheckBox附加在QListWidgetItem项上. 具体看下面得的示例: //QCombo

ajax动态添加复选框

1 function getLands() { 2 3 $.ajax({ 4 url:"httpserver.do?doPost&userQygs="+$("#userQygs").val(), 5 type:"POST", 6 dataType:"text", 7 8 success:function(data){ 9 10 if(data==null||data==""){ 11 12 aler

dojo:为数据表格添加复选框

一.添加复选框 此时应该选用EnhancedGrid,而不是普通的DataGrid.添加复选框需要设置EnhancedGrid的plugins属性,如下: gridLayout =[{ defaultCell: { type: cells._Widget, styles: 'text-align: center;' }, cells: [ { name: "WBS", field: "wbsCode", width: "60px"}, { nam

C#ListView控件添加复选框并获取选中的数目

1.添加复选框:listView1.CheckBoxes = true; 2.选中listview并获取选中的数目: private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e) { e.Item.Selected = e.Item.Checked; m = listView1.CheckedItems.Count; label1.Text = "当前选中数:" + m.ToString(); } 说

swing jtree 添加了复选框的树,利用了递归获取选中的果实

原文:swing jtree 添加了复选框的树,利用了递归获取选中的果实 源代码下载地址:http://www.zuidaima.com/share/1553270755478528.htm 矿泉水2013-11-05 16:11:37 swing jtree 添加了复选框的树,利用了递归获取选中的果实

DateGridView标题列头添加复选框

第一:添加列标题时,添加两个空格--用于显示复选框: 第二:实现列标题添加复选框,代码如下: private void AddCheckeBoxToDGVHeader(DataGridView dgv) { for (int i = 0; i < this.dgvList.Columns.Count; i++) { System.Windows.Forms.CheckBox ckBox = new System.Windows.Forms.CheckBox(); //ckBox.Text = &qu

MUI组件二:复选框、对话框、图片轮播、图标和输入框

1.checkbox(复选框) checkbox常用于多选的情况,比如批量删除.添加群聊等: DOM结构 <div class="mui-input-row mui-checkbox"> <label>checkbox示例</label> <input name="checkbox1" value="Item 1" type="checkbox" checked> </di