`

flex中tree带checkbox

 
阅读更多

        网上有很多tree带checkbox的例子,但我一直希望选择父类,子类全部选中,去掉其中一个子类,父类仍选中状态,并且根节点不带checkbox,弄了好久,终于可以了,写下例子纪念一下。

源代码:

<?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="">
     <bj label="1班" id="b1" lx="1" selected="false">
       <student label="刘备" id="s1" lx="2" selected="false">
                      <student label="关羽" id="s3" lx="3" selected="false">
                       <student label="关羽" id="s3" lx="3" selected="false"/>
      <student label="诸葛亮" id="s4" lx="3" selected="false"/>
      <student label="貂蝉" id="s5" lx="3" selected="false"/>
      <student label="吕布" id="s6" lx="3" selected="false"/>
                    </student>
      <student label="诸葛亮" id="s4" lx="3" selected="false"/>
      <student label="貂蝉" id="s5" lx="3" selected="false"/>
      <student label="吕布" id="s6" lx="3" selected="false"/>
    </student>
       <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].@selected=="true"){
      result+=xml.children()[i].@label+"\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>

 

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( data.@selected!="" )
   {
    data.@selected= checkBox.selected.toString();
    trace(data.@selected);
    /**
     * 如果有需要,在这里处理选中父,全选子节点的方法。
     * */
    for (var i:int=0;i<data.children().length();i++)
    {
     data.children()[i].@selected=data.@selected;
     var flag:Boolean=false;
     if(data.@selected==true){
      flag=true;
     }
     change(data.children()[i],flag);
    }    
    
   }   
  }
  
  private function change(data:XML,flag:Boolean):void{
   for (var i:int=0;i<data.children().length();i++)
   {
    data.children()[i].@selected=flag;
    change(data.children()[i],flag);
   }   
  }
  /**
   * 初始化控件时, 给checkbox赋值
   */       
  override protected function commitProperties():void
  {
   super.commitProperties();
   if(data.@selected!="" )
   {
    if(data.@selected=="true"){
     checkBox.selected=true;
    }else{
     checkBox.selected=false;
    }
   }
   else
   {
    checkBox.selected = false;
    checkBox.visible=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();
  }
 }
}

 

截图如下:



 这个例子是仿照别人的写的,但不知是谁了,但依旧深深感谢他!

  • 大小: 14.5 KB
分享到:
评论

相关推荐

    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+checkbox级联勾选

    "Flex Tree + Checkbox级联勾选"是一个重要的功能点,通常出现在数据管理、配置界面或文件管理系统中,允许用户进行批量选择或级联操作。 首先,我们来详细了解一下Flex Tree。Flex Tree是基于Adobe Flex技术的一种...

    flex 中tree渲染checkbox

    在Flex编程环境中,Tree组件是一种常用的用户界面元素,用于展示层次结构的数据。当我们需要在树形结构中添加复选框(checkbox)功能时,可以实现用户对多项选择的操作,这在数据筛选、配置设置等场景中非常常见。...

    flex带复选框的tree,flex checkboxtree

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

    flex tree 中渲染checkBox

    本文将深入探讨如何在Flex Tree组件中渲染CheckBox,这在创建具有交互性和选择功能的树状视图时非常有用。通过学习这个主题,开发者可以提升其在Flex应用程序中的用户界面设计能力。 `flex tree 中渲染checkBox`这...

    Flex tree+checkbox可实现级联勾选 修改

    flex tree+checkbox可实现级联勾选 修改后 修改CheckTreeDemoRenderer.as这个文件中 while (!cursor.afterLast){ if (cursor.current.@state == STATE_CHECKED) { noChecks++; }else if (cursor.current.@state =...

    flex checkboxtree复选树形下拉框

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

    flex Tree checkbox 修改过后的

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

    flex Tree 复选框。

    在Flex编程环境中,Tree组件是一种常用的用户界面元素,它用于展示层次结构的数据。在这个特定的场景中,我们关注的是在Flex Tree中集成复选框功能,这为用户提供了一种直观的方式来选择或操作树形结构中的多个节点...

    Flex4的Tree控件加CheckBox

    在这个场景中,我们关注的是如何在Flex4的Tree控件中添加CheckBox,以便用户可以多选树形结构中的节点。 Tree控件在Flex中用于展示层次结构的数据,它允许用户展开和折叠节点,查看和导航数据结构。在很多情况下,...

    flex 带有checkbox的tree

    这个是带有checkbox的tree,下载即可使用哦。

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

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

    CheckBoxTree.zip

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

    flex advancedDataGrid 中如何实现带checkbox的树

    综上所述,实现Flex AdvancedDataGrid中带复选框的树形结构涉及数据模型的设计、HierarchicalData的使用、AdvancedDataGrid的配置以及事件处理等多个方面。通过灵活应用这些技术,我们可以创建出功能强大且易于操作...

    flex tree checkbox

    而当我们谈论"flex tree checkbox"时,这意味着我们要在Tree组件的节点上添加复选框,使得用户可以对每个节点进行多选操作,提高交互性和用户体验。 首先,让我们深入了解Flex Tree组件。Tree组件是基于Adobe Flex ...

    flex checkboxtree 和可增加面板,可关闭的tab页

    `CheckboxTree`和可添加/关闭的`TabPanel`是Flex中常见的组件,用于提供用户友好的交互界面。这篇博客文章《flex checkboxtree 和可增加面板,可关闭的tab页》可能详细讲解了如何在Flex应用中实现这两个功能。 `...

    Flex Checkbox Tree

    【Flex Checkbox Tree】是一种在Adobe Flex开发环境中实现的交互式组件,它将树形结构的数据与复选框相结合,提供了一种用户友好的方式来选择或取消选择树节点。这个组件通常用于数据筛选、配置设置或者层级关系的...

    flex人力资源树例子,部门+人员结构图,使用tree+checkbox实现

    在人力资源树的例子中,每个部门或员工节点都带有checkbox,允许用户进行多选操作,例如批量分配权限、选择参与项目的人选等。 5. **数据绑定**:Flex中的数据绑定机制使得Tree组件的节点与后端数据源可以直接关联...

Global site tag (gtag.js) - Google Analytics