[Flex] 组件Tree系列 —— 支持CheckBox组件
主程序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组件的更多相关文章
- [Flex] 组件Tree系列 —— 支持元素的拖放排序
mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:支持元素拖放排序--> &l ...
- [Flex] 组件Tree系列 —— 打开和关闭节点
mxm: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:打开和关闭节点--> < ...
- [Flex] 组件Tree系列 —— 运用variableRowHeight和wordWrap设置可变行高
mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:运用variableRowHeig ...
- [Flex] 组件Tree系列 —— 作为PopUpButton的弹出菜单
mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:Tree作为PopUpButton ...
- [Flex] 组件Tree系列 —— 利用firstVisibleItem属性,设置或取得第一个显示节点
mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述: 利用firstVisibleIt ...
- [Flex] 组件Tree系列 —— 运用LabelFunction hasChildren getChildren设置Tree包含节点个数
mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:运用LabelFunction h ...
- [Flex] 组件Tree系列 —— 将数组作为dataProvider
mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:将数组作为dataProvider ...
- [Flex] 组件Tree系列 —— 运用openItems获取打开节点
mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:运用openItems获取打开节点 ...
- [Flex] 组件Tree系列 —— 阻止用户点击选中Tree中分支节点
mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:阻止用户点击选中Tree中分支节点 ...
随机推荐
- 201671010127 2016-2017-18 Java期末总结
通过本学期Java课程的学习,我对于面向对象的编程语言有了进一步的了解.首先面向对象编程的特点是抽象.封装.继承.多态.由于已经学过c语言,所以对Java的学习实际上是从第四章对向与类开始的,然后学习 ...
- centos7 安装VMware Tools 遇到的一系列问题的解决方案
先部署源:http://www.cnblogs.com/jiu0821/p/8074463.html VMware Tools安装方法参考:http://www.cnblogs.com/jiu0821 ...
- css的优先级和权重问题 以及!important优先级
一,前言: 刚加的css怎么没有渲染出来?浏览器中查看,发现是被其他的css给覆盖了,相信我们都曾遇到过这样的问题.那么浏览器是如何选择css标签的渲染顺序的呢?换句话说,css选择器的优先级是怎么规 ...
- 从Oracle数据库中查询与某一时间点最接近的记录
select * from data_taskregionschedule WHERE regioncode='HYL' and updatetime-to_date('2018-05-15','yy ...
- CecOS Virtualization
CecOS CecOS 是 OPENFANS 为中小型企业提供企业开源云计算解决方案的基础框架:CecOSvt 是一款运行在社区企业云操作系统(CecOS)上的虚拟化开放式解决方案. 也可用演示模式. ...
- VIO系统的IMU与相机时间偏差标定
视觉里程计(VIO)作为一种空间定位方法,广泛应用于VR/AR.无人驾驶和移动机器人,比如近年火热的苹果 AR-Kit和谷歌AR-Core都使用了VIO技术进行空间定位.通常,VIO系统忽略IMU ...
- Boost线程详解
一.创建一个线程 创建线程 boost::thread myThread(threadFun); 需要注意的是:参数可以是函数对象或者函数指针.并且这个函数无参数,并返回void类型. 当一个thre ...
- Spring.net 后处理器 可用来切换实例
.xml配置 <!--我们在Object.xml文件上将HexuObjectPostProcessor注册到上下文对象中去--> <object id="hexu" ...
- Microsoft(C)注册服务器(32位)CPU占用高
Microsoft(C)注册服务器(32位)CPU占用高 摘自:https://blog.csdn.net/jtsqrj/article/details/83034252 2018年10月12日 23 ...
- xml与java代码相互装换的工具类
这是一个java操作xml文件的工具类,最大的亮点在于能够通过工具类直接生成xml同样层次结构的java代码,也就是说,只要你定义好了xml的模板,就能一键生成java代码.省下了自己再使用工具类写代 ...