主程序mxml:

 <?xml version="1.0" encoding="utf-8"?>

 <!--功能描述:支持CheckBox-->

 <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 com.render.TreeRightClickManager; import mx.controls.Alert;
private var rightClickRegisted:Boolean; [Bindable]
private var data:XML=
<data>
<actor label="周星驰" level="0" selected="false">
<year label="1988" level="1" selected="false">
<item label="《霹雳先锋》香港票房8916612 " level="2" selected="false"/>
<item label="《捕风汉子》香港票房3149395 " level="2" selected="false"/>
<item label="《最佳女婿》香港票房5807710 " level="2" selected="false"/>
</year>
<year label="1989" level="1" selected="false">
<item label="《龙在天涯》香港票房6809853 " level="2" selected="false"/>
<item label="《义胆群英》香港票房7913329 " level="2" selected="false"/>
<item label="《流氓差婆》香港票房5624622 " level="2" selected="false"/>
<item label="《风雨同路》香港票房9335299 " level="2" selected="false"/>
</year>
<year label="1990" level="1" selected="false">
<item label="《望夫成龙》香港票房13703364 " level="2" selected="false"/>
<item label="《咖喱辣椒》香港票房15777856 " level="2" selected="false"/>
<item label="《小偷阿星》香港票房7968106 " level="2" selected="false"/>
<item label="《师兄撞鬼》香港票房12128944 " level="2" selected="false"/>
<item label="《赌圣》香港票房41326156 " level="2" selected="false"/>
<item label="《无敌幸运星》香港票房18799869" level="2" selected="false"/>
<item label="《江湖最后一个大佬》香港票房5495811 " level="2" selected="false"/>
</year>
</actor> <actor label="李连杰" level="0" selected="false">
<year label="1992" level="1" selected="false">
<item label="笑傲江湖之东方不败(1992)" level="2" selected="false"/>
<item label="黄飞鸿之二男儿当自强(1992) " level="2" selected="false"/>
<item label="黄飞鸿之三狮王争霸(1992) " level="2" selected="false"/>
</year>
<year label="1993" level="1" selected="false">
<item label="方世玉Ⅱ万夫莫敌(1993) " level="2" selected="false"/>
<item label="倚天屠龙记之魔教教主(1993)" level="2" selected="false"/>
<item label="黄飞鸿之铁鸡斗蜈蚣(1993)" level="2" selected="false"/>
<item label="太极张三丰(1993)" level="2" selected="false"/>
</year>
<year label="1994" level="1" selected="false">
<item label="新少林五祖(1994)" level="2" selected="false"/>
<item label="精武英雄(1994)" level="2" selected="false"/>
<item label="中南海保镖(1994)" level="2" selected="false"/>
<item label="给爸爸的信(1995)" level="2" selected="false"/>
</year>
<year label="1995" level="1" selected="false">
<item label="鼠胆龙威(1995)" level="2" selected="false"/>
<item label="给爸爸的信(1995)" level="2" selected="false"/>
</year>
</actor>
</data>
;
private function treeChangeHandle(event:Event):void{
var selectedTreeNode:XML;
selectedTreeNode=Tree(event.target).selectedItem as XML;
} 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") && (xml.children()[i].@level=="2")){
result+=xml.children()[i].@label+"\n";
}
var temp:XML=new XML(xml.children()[i].toString());
if(temp.children().length()>0){
result+=getSelectedChild(temp);
}
}
return result;
} protected function add_clickHandler(event:MouseEvent):void
{
txtAr.text=getSelectedChild(data);
} ]]>
</fx:Script> <s:Panel width="300" height="400" title="所有影片">
<mx:Tree id="tree" top="0" left="0" width="100%" height="100%" labelField="@label" showRoot="false"
itemRenderer="com.render.TreeCheckBoxRenderer" dataProvider="{data}"
change="treeChangeHandle(event)" styleName="Tree">
</mx:Tree>
</s:Panel>
<s:Panel x="310" width="300" height="400" title="选中的影片">
<s:TextArea id="txtAr" top="0" left="0" width="100%" height="100%"/>
</s:Panel>
<s:Button y="410" label="添加选中" click="add_clickHandler(event)"/>
</s:Application>

com.render.TreeCheckBoxRenderer类:

package com.render
{
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; import spark.components.Button; /**
* 支持CheckBox的TreeItemRenderer
* @author
*
*/
public class TreeCheckBoxRenderer extends TreeItemRenderer
{
public function TreeCheckBoxRenderer()
{
super();
} /**
* 表示CheckBox控件从data中所取数据的字段
*/ protected var checkBox:CheckBox;
protected var button:Button; /**
* 构建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
{
if( data.@selected!="" ){
data.@selected= checkBox.selected.toString();
for (var i:int=0;i<data.children().length();i++){
data.children()[i].@selected=checkBox.selected.toString();;
}
}
} /**
* 初始化控件时, 给checkbox赋值
*/
override protected function commitProperties():void
{
super.commitProperties();
if(data.@selected!="" ){
//trace(data,"data");
if(data.@selected=="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();
}
}
}

[Flex] 组件Tree系列 —— 支持CheckBox组件的更多相关文章

  1. [Flex] 组件Tree系列 —— 支持元素的拖放排序

    mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:支持元素拖放排序--> &l ...

  2. [Flex] 组件Tree系列 —— 打开和关闭节点

    mxm: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:打开和关闭节点--> < ...

  3. [Flex] 组件Tree系列 —— 运用variableRowHeight和wordWrap设置可变行高

    mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:运用variableRowHeig ...

  4. [Flex] 组件Tree系列 —— 作为PopUpButton的弹出菜单

    mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:Tree作为PopUpButton ...

  5. [Flex] 组件Tree系列 —— 利用firstVisibleItem属性,设置或取得第一个显示节点

    mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述: 利用firstVisibleIt ...

  6. [Flex] 组件Tree系列 —— 运用LabelFunction hasChildren getChildren设置Tree包含节点个数

    mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:运用LabelFunction h ...

  7. [Flex] 组件Tree系列 —— 将数组作为dataProvider

    mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:将数组作为dataProvider ...

  8. [Flex] 组件Tree系列 —— 运用openItems获取打开节点

    mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:运用openItems获取打开节点 ...

  9. [Flex] 组件Tree系列 —— 阻止用户点击选中Tree中分支节点

    mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:阻止用户点击选中Tree中分支节点 ...

随机推荐

  1. solr的简单部署:在tomcat中启动slor

    1,首先要下载solr 途径1: 官网网址: http://lucene.apache.org/ 与Lucene的官网是一个 途径2: 下载历史版本的网址: http://archive.apache ...

  2. lock free queues

    无锁队列,下面链接是源码,包含4种队列:单生产者单消费者/多生产者多消费者,队列定长/不定长.元素建议为简单数据类型,复杂类型都采用指针形式. queues-master.zip 源码来源:https ...

  3. cs api 之一

    无法创建   无法创建网络   执行顺序  

  4. 面向对象的JavaScript-005-Function.prototype.call()的3种作用

    1. // call的3种作用 // 1.Using call to chain constructors for an object function Product(name, price) { ...

  5. [C++] Returning values by reference in C++

    A C++ program can be made easier to read and maintain by using references rather than pointers. A C+ ...

  6. 创建一个实例&创建一个线程。。

    using System; using System.Threading; namespace WorkerThread02 { class ThreadTest { bool done; stati ...

  7. Django框架 之 信号

    Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. Django内置信号 Model signals pre_init ...

  8. MySQL 授权,回收权限,查看权限

    show GRANTS for root@localhost;flush privileges;SHOW PROCESSLIST; #全局授权,回收权限GRANT ALL ON *.* TO 'tes ...

  9. 42 :809*x=800*x+9*x+1

    题目:809*x=800*x+9*x+1(去掉最后的1有解)其中x代表的两位数,8*x的结果为两位数,9*x的结果为3位数.求x代表的两位数,及809*x后的结果(两种方法实现) public cla ...

  10. redis的安装使用

    安装过程:http://www.cnblogs.com/littlehb/archive/2013/04/24/3040476.html 配置文件参考:http://redis.io/topics/c ...