TreeCheckBoxRender.as
package model
{
import flash.events.Event;
import mx.controls.CheckBox;
import mx.controls.treeClasses.TreeItemRenderer;
import mx.controls.treeClasses.TreeListData;
/**
* 支持CheckBox的TreeItemRenderer
* @author jun
*
*/
public class TreeCheckBoxRender extends TreeItemRenderer
{
public function TreeCheckBoxRender()
{
super();
}
/**
* 表示checkBox控件从data中所取数据的字段
*/
private var _selectedField:String = "selected";
protected var checkBox:CheckBox;
/**
* 构建checkBox
*/
override protected function createChildren():void {
super.createChildren();
checkBox = new CheckBox();
addChild(checkBox);
checkBox.addEventListener(Event.CHANGE,changeHandler);
}
/**
* 点击checkbox时,更新dataProvider
*/
protected function changeHandler(event:Event):void {
if(data && data[_selectedField] != undefined) {
data[_selectedField] = checkBox.selected;
}
}
/**
* 初始化控件时,给checkBox赋值
*/
override protected function commitProperties():void {
super.commitProperties();
trace(data[_selectedField]);
if(data && data[_selectedField] != undefined) {
checkBox.selected = data[_selectedField];
} else {
checkBox.selected = false;
}
}
/**
* 重置itemRenderer宽度
*/
override protected function measure():void {
super.measure();
measuredWidth += checkBox.getExplicitOrMeasuredWidth();
}
/**
* 重新排列位置,将label后移
*/
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();
}
}
}
Tree.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12">
<mx:Script>
<!--[CDATA[
import mx.collections.ArrayCollection;
public var collection:ArrayCollection = new ArrayCollection([
{"name" : "上海", "selected":false, "children":[
{"name":"黄浦", "selected":false },
{"name":"浦东", "selected":true },
{"name":"静安", "selected":false },
{ "name":"徐汇", "selected":false }
]},
{"name":"北京", "selected":false,"children":[
{"name":"海淀", "selected":false },
{ "name":"朝阳", "selected":true },
{"name":"丰台", "selected":false } ]}
]);
]]-->
</mx:Script>
<mx:Tree width="300" height="500" labelField="name"
itemRenderer="model.TreeCheckBoxRender" dataProvider="{collection}"/>
</mx:Application>
运行后效果:
分享到:
相关推荐
2. **自定义组件**:除了增强的Flex组件,Flexlib还提供了一些独特的自定义组件,比如高级图表、日历控件、树形视图等,这些组件在标准Flex库中可能并未包含。 3. **数据绑定和状态管理**:Flexlib可能包含了更高效...
通过使用 ArcGIS API for Flex,开发者可以实现以下功能: 1. 显示地图数据并与之交互。 2. 在服务器上执行空间处理模型并展示结果。 3. 基于 ArcGIS Online 地图服务来显示自己的业务数据。 4. 根据属性或位置查找...
flex与bison结合使用,可以构建完整的语言解析系统,实现从输入文本到抽象语法树的转换。 然后,我们来关注一下diffutils。这是一个包含三个实用程序的套件:diff、sdiff和patch。diff用于比较两个文件或文件集的...
在Flex开发中,创建一个带有复选框的列表树是一种常见的需求,这通常用于实现用户对多级数据的筛选和选择。"Flex实现带复选框的列表树"这一主题涵盖了Flex编程、UI组件设计以及事件处理等多个方面的知识点。下面我们...
在编程世界中,`bison` 和 `flex` 是两款非常重要的工具,它们主要用于解析器和词法分析器的生成。...在`bison-2.1`和`flex-2.5.4a-1`这两个版本中,我们可以期待它们提供了稳定的性能和兼容性,以满足各种项目的需要。
本文将深入探讨一个基于C++实现的开源项目——Cool-Language-Flex-Bison-compiler,这是一款使用Flex和Bison工具构建的编译器,用于处理名为"Cool"的语言。Flex是用于生成词法分析器(词法分析程序或扫描器)的工具...
在本案例中,我们关注的是一个特定的实现——"flex拖动树形",这是一种允许用户通过拖放操作在两个区域之间移动节点的自定义树形控件。 拖放功能是人机交互中常见的一种交互模式,用于在界面上移动元素,常用于文件...
这个容器应该应用`display: flex`样式,使其成为Flex容器,并根据需要设置`flex-direction`(默认为row,可改为column以垂直堆叠子元素)。 2. **节点结构**:每个节点是一个单独的元素,可以是一个`div`或者其他...
当词法分析器(由`flex`生成)识别出一个个单词标记后,`bison`生成的解析器会根据语法规则进行解析,构建抽象语法树(AST),从而理解源代码的结构和含义。 在Windows环境下使用`flex`和`bison`,通常需要以下步骤...
要实现Flex ComBox的下拉树功能,我们需要以下几个关键步骤: 1. 引入库:首先,确保在你的项目中包含了Flex SDK的相关库,特别是包含Tree组件的库,例如mx.controls.Tree。 2. 创建Tree对象:在代码中创建一个...
在Flex4中,选择树组件(Tree)是用户界面中常用的一种控件,它允许用户以层级结构展示数据,并进行选择操作。这个组件特别适合展现具有层次关系的数据,如文件系统、组织架构或者产品分类等。 在Flex4中,Tree组件...
Flex中嵌入Google地图 - 菩提树 - ITeye技术网站 分享:Flex builder3执行Debug需要安装的Flash Player Debugger环境 百度空间_应用平台 flex4 的DataGrid里面加一列CheckBox并实现数据交互的试验 - 暖阳下的猫的...
4. 使用Flex实现动态树和异步树: - Flex SDK提供了Tree和TreeItemRenderer类,用于创建和定制树形组件。开发者可以通过这些类来实现动态树和异步树的功能。 - 数据提供者(DataProvider):设置数据模型,通常是...
本示例着重讲解如何利用动态绑定XML来实现Flex树控件的绑定,主要涉及的技术包括FLEX、.NET、XML以及递归绑定树结构。 首先,让我们了解Flex中的树控件(Tree)和XML数据源。在Flex中,Tree控件用于显示层次结构的...
本文将深入解析如何在Flex中创建并自定义动态树,以及如何通过事件处理实现更高级的功能,如动态图表的构建。 #### 一、树形控件的自定义图标 在Flex中,树形控件允许开发者高度定制其外观,包括默认图标、打开和...
本篇将详细讲解如何使用Flex来实现一个树结构的列表,即所谓的"树结构的datagrid列表"。 一、Flex中的Tree组件 Flex提供了一个内置的`Tree`组件,用于展示层次化的数据。它允许用户通过展开和折叠节点来查看数据的...
综上所述,实现Flex AdvancedDataGrid中带复选框的树形结构涉及数据模型的设计、HierarchicalData的使用、AdvancedDataGrid的配置以及事件处理等多个方面。通过灵活应用这些技术,我们可以创建出功能强大且易于操作...
在这个特定的场景中,我们讨论的是一个Flex中的“拖拽树控件”,这是一种允许用户通过拖放操作在树形结构中添加、删除和移动节点的组件。 在Flex中,实现拖拽功能主要依赖于内置的DragManager和DropManager类。...