[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中分支节点 ...
随机推荐
- JAVA heap space 内存溢出
3月28日开始使用JAVA调用SAP RFC后提示内存溢出 尝试增加set java_OPTS.....但仍然提示内存溢出 最终设置方法
- Spring Data Solr操作solr的简单案例
Spring Data Solr简介 虽然支持任何编程语言的能力具有很大的市场价值,你可能感兴趣的问题是:我如何将Solr的应用集成到Spring中?可以,Spring Data Solr就是为了方便 ...
- TCP端口状态说明ESTABLISHED、TIME_WAIT、 CLOSE_WAIT
一. 首先说下tcp端口的几种状态: 1.LISTENING状态 FTP服务启动后首先处于侦听(LISTENING)状态. 2.ESTABLISHED状态 ESTABLISHED的意思是建立连接.表示 ...
- 优化mysql slave的同步速度
测试环境:Red Hat Enterprise Linux Server release 6.3 (Santiago)Server version: 5.6.22-log MySQL Communit ...
- tensorflow学习笔记----tensorflow在windows的安装及TensorBoard中mnist样例
前言: ...
- Xmind 常用快捷键列表(官方推荐)
XMind中文版快捷键指南 XMind是一款非常实用的思维导图软件,能够帮助人们快速理清思路,打开新的局面.熟练地掌握快捷键的操作不光能够提供便捷,更能很大程度上的缩短制作时间,提高工作效率.本文总结 ...
- Java中的并发工具类:CountDownLatch、CyclicBarrier和Semaphore
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法. 一. ...
- Linux下查看Nginx的并发连接数和连接状态-乾颐堂
Linux下查看Nginx等的并发连接数和连接状态. 1.查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态: netstat -n | awk '/^tcp/ {++S[$N ...
- Oracle 用户
1.关于创建用户; 2.用户配置文件; 3.创建用户; 4.更改用户; 5.删除用户; 1.关于创建用户: 1.1 用户名:创建数据库用户必须具有 Create user 系统权限,必须指定用户名和密 ...
- [GO]空接口
package main import "fmt" //空接口的实际意义就在于在使用函数时,空接口可以接收任意类型的值,类似于python中的*args, **kwargs fun ...