带选择框 的树checkbox tree.docx
- 文档编号:17988606
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:28
- 大小:65.48KB
带选择框 的树checkbox tree.docx
《带选择框 的树checkbox tree.docx》由会员分享,可在线阅读,更多相关《带选择框 的树checkbox tree.docx(28页珍藏版)》请在冰点文库上搜索。
带选择框的树checkboxtree
没什么说的,选子,带父级菜单,选父菜单,全选上所有子级菜单的功能全有了。
packageht
{
importmx.controls.Tree;
importmx.core.ClassFactory;
importmx.events.ListEvent;
/**
*三状态复选框树控件
*
*/
publicclassCheckTreeextendsTree
{
//数据源中状态字段
privatevarm_checkBoxStateField:
String="@state";
//部分选中的填充色
[Bindable]
privatevarm_checkBoxBgColor:
uint=0x009900;
//填充色的透明度
[Bindable]
privatevarm_checkBoxBgAlpha:
Number=1;
//填充色的边距
[Bindable]
privatevarm_checkBoxBgPadding:
Number=3;
//填充色的四角弧度
[Bindable]
privatevarm_checkBoxBgElips:
Number=2;
//取消选择是否收回子项
[Bindable]
privatevarm_checkBoxCloseItemsOnUnCheck:
Boolean=true;
//选择项时是否展开子项
[Bindable]
privatevarm_checkBoxOpenItemsOnCheck:
Boolean=false;
//选择框左边距的偏移量
[Bindable]
privatevarm_checkBoxLeftGap:
int=8;
//选择框右边距的偏移量
[Bindable]
privatevarm_checkBoxRightGap:
int=20;
//是否显示三状态
[Bindable]
privatevarm_checkBoxEnableState:
Boolean=true;
//与父项子项关联
[Bindable]
privatevarm_checkBoxCascadeOnCheck:
Boolean=true;
//双击项目
publicvaritemDClickSelect:
Boolean=true;
publicfunctionCheckTree()
{
super();
doubleClickEnabled=true;
}
overrideprotectedfunctioncreateChildren():
void
{
varmyFactory:
ClassFactory=newClassFactory(CheckTreeRenderer);
this.itemRenderer=myFactory;
super.createChildren();
addEventListener(ListEvent.ITEM_DOUBLE_CLICK,onItemDClick);
}
publicfunctionPropertyChange():
void
{
dispatchEvent(newListEvent(mx.events.ListEvent.CHANGE));
}
/**
*树菜单,双击事件
*@paramevt双击事件源
*
*/
publicfunctiononItemDClick(e:
ListEvent):
void
{
if(itemDClickSelect)
OpenItems();
}
/**
*打开Tree节点函数,被有打开节点功能的函数调用
*@paramitem要打开的节点
*
*/
publicfunctionOpenItems():
void
{
if(this.selectedIndex>=0&&this.dataDescriptor.isBranch(this.selectedItem))
this.expandItem(this.selectedItem,!
this.isItemOpen(this.selectedItem),true);
}
/**
*数据源中状态字段
*@return
*
*/
[Bindable]
publicfunctiongetcheckBoxStateField():
String
{
returnm_checkBoxStateField;
}
publicfunctionsetcheckBoxStateField(v:
String):
void
{
m_checkBoxStateField=v;
PropertyChange();
}
/**
*部分选中的填充色
*@return
*
*/
[Bindable]
publicfunctiongetcheckBoxBgColor():
uint
{
returnm_checkBoxBgColor;
}
publicfunctionsetcheckBoxBgColor(v:
uint):
void
{
m_checkBoxBgColor=v;
PropertyChange();
}
/**
*填充色的透明度
*@return
*
*/
[Bindable]
publicfunctiongetcheckBoxBgAlpha():
Number
{
returnm_checkBoxBgAlpha;
}
publicfunctionsetcheckBoxBgAlpha(v:
Number):
void
{
m_checkBoxBgAlpha=v;
PropertyChange();
}
/**
*填充色的边距
*@return
*
*/
[Bindable]
publicfunctiongetcheckBoxBgPadding():
Number
{
returnm_checkBoxBgPadding;
}
publicfunctionsetcheckBoxBgPadding(v:
Number):
void
{
m_checkBoxBgPadding=v;
PropertyChange();
}
/**
*填充色的四角弧度
*@return
*
*/
[Bindable]
publicfunctiongetcheckBoxBgElips():
Number
{
returnm_checkBoxBgElips;
}
publicfunctionsetcheckBoxBgElips(v:
Number):
void
{
m_checkBoxBgElips=v;
PropertyChange();
}
/**
*取消选择是否收回子项
*@return
*
*/
[Bindable]
publicfunctiongetcheckBoxCloseItemsOnUnCheck():
Boolean
{
returnm_checkBoxCloseItemsOnUnCheck;
}
publicfunctionsetcheckBoxCloseItemsOnUnCheck(v:
Boolean):
void
{
m_checkBoxCloseItemsOnUnCheck=v;
PropertyChange();
}
/**
*选择项时是否展开子项
*@return
*
*/
[Bindable]
publicfunctiongetcheckBoxOpenItemsOnCheck():
Boolean
{
returnm_checkBoxOpenItemsOnCheck;
}
publicfunctionsetcheckBoxOpenItemsOnCheck(v:
Boolean):
void
{
m_checkBoxOpenItemsOnCheck=v;
PropertyChange();
}
/**
*选择框左边距的偏移量
*@return
*
*/
[Bindable]
publicfunctiongetcheckBoxLeftGap():
int
{
returnm_checkBoxLeftGap;
}
publicfunctionsetcheckBoxLeftGap(v:
int):
void
{
m_checkBoxLeftGap=v;
PropertyChange();
}
/**
*选择框右边距的偏移量
*@return
*
*/
[Bindable]
publicfunctiongetcheckBoxRightGap():
int
{
returnm_checkBoxRightGap;
}
publicfunctionsetcheckBoxRightGap(v:
int):
void
{
m_checkBoxRightGap=v;
PropertyChange();
}
/**
*是否显示三状态
*@return
*
*/
[Bindable]
publicfunctiongetcheckBoxEnableState():
Boolean
{
returnm_checkBoxEnableState;
}
publicfunctionsetcheckBoxEnableState(v:
Boolean):
void
{
m_checkBoxEnableState=v;
PropertyChange();
}
/**
*与父项子项关联
*@return
*
*/
[Bindable]
publicfunctiongetcheckBoxCascadeOnCheck():
Boolean
{
returnm_checkBoxCascadeOnCheck;
}
publicfunctionsetcheckBoxCascadeOnCheck(v:
Boolean):
void
{
m_checkBoxCascadeOnCheck=v;
PropertyChange();
}
}
}
CheckTreeRenderer.as
packageht
{
importflash.events.MouseEvent;
importflash.geom.Rectangle;
importflash.xml.*;
importmx.collections.*;
importmx.controls.CheckBox;
importmx.controls.Tree;
importmx.controls.listClasses.*;
importmx.controls.treeClasses.*;
importmx.events.FlexEvent;
importmx.events.ListEvent;
/**
*三状态复选框树控件
*
*/
publicclassCheckTreeRendererextendsTreeItemRenderer
{
protectedvarmyCheckBox:
CheckBox;
/**
*STATE_SCHRODINGER:
部分子项选中
*STATE_CHECKED:
全部子项选中
*STATE_UNCHECKED:
全部子项未选中
*/
staticprivatevarSTATE_SCHRODINGER:
int=2;
staticprivatevarSTATE_CHECKED:
int=1;
staticprivatevarSTATE_UNCHECKED:
int=0;
privatevarmyTree:
CheckTree;
publicfunctionCheckTreeRenderer()
{
super();
mouseEnabled=true;
}
/**
*初始化完成时处理复选框和图片对象
*
*/
overrideprotectedfunctioncreateChildren():
void
{
myCheckBox=newCheckBox();
addChild(myCheckBox);
myCheckBox.addEventListener(MouseEvent.CLICK,checkBoxToggleHandler);
myTree=this.ownerasCheckTree;
super.createChildren();
myTree.addEventListener(ListEvent.CHANGE,onPropertyChange);
}
protectedfunctiononPropertyChange(e:
ListEvent=null):
void
{
this.updateDisplayList(unscaledWidth,unscaledHeight);
}
/**
*//TODO:
递归设置父项目的状态
*@paramitem项目
*@paramtree树对象
*@paramstate目标状态
*
*/
privatefunctiontoggleParents(item:
Object,tree:
Tree,state:
int):
void
{
if(item==null)
return;
else
{
varstateField:
String=myTree.checkBoxStateField;
vartmpTree:
IList=myTree.dataProviderasIList;
varoldValue:
Number=item[stateField]asNumber;
varnewValue:
Number=stateasNumber;
item[myTree.checkBoxStateField]=state;
tmpTree.itemUpdated(item,stateField,oldValue,newValue);
//item[myTree.checkBoxStateField]=state;
varparentItem:
Object=tree.getParentItem(item);
if(null!
=parentItem)
toggleParents(parentItem,tree,getState(tree,parentItem));
}
}
/**
*//TODO:
设置项目的状态和子项的状态
*@paramitem项目
*@paramtree树对象
*@paramstate目标状态
*
*/
privatefunctiontoggleChildren(item:
Object,tree:
Tree,state:
int):
void
{
if(item==null)
return;
else
{
varstateField:
String=myTree.checkBoxStateField;
vartmpTree:
IList=myTree.dataProviderasIList;
varoldValue:
Number=item[stateField]asNumber;
varnewValue:
Number=stateasNumber;
item[myTree.checkBoxStateField]=state;
tmpTree.itemUpdated(item,stateField,oldValue,newValue);
vartreeData:
ITreeDataDescriptor=tree.dataDescriptor;
if(myTree.checkBoxCascadeOnCheck&&treeData.hasChildren(item))
{
varchildren:
ICollectionView=treeData.getChildren(item);
varcursor:
IViewCursor=children.createCursor();
while(!
cursor.afterLast)
{
toggleChildren(cursor.current,tree,state);
cursor.moveNext();
}
}
}
}
/**
*//TODO:
获得parent的状态
*@paramtree树对象
*@paramparent目标项
*@return状态
*
*/
privatefunctiongetState(tree:
Tree,parent:
Object):
int
{
varnoChecks:
int=0;
varnoCats:
int=0;
varnoUnChecks:
int=0;
if(parent!
=null)
{
vartreeData:
ITreeDataDescriptor=tree.dataDescriptor;
varcursor:
IViewCursor=treeData.getChildren(parent).createCursor();
while(!
cursor.afterLast)
{
if(cursor.current[myTree.checkBoxStateField]==STATE_CHECKED)
noChecks++;
elseif(cursor.current[myTree.checkBoxStateField]==STATE_UNCHECKED)
noUnChecks++;
else
noCats++;
cursor.moveNext();
}
}
if((noChecks>0&&noUnChecks>0)||noCats>0)
returnSTATE_SCHRODINGER;
elseif(noChecks>0)
returnSTATE_CHECKED;
else
returnSTATE_UNCHECKED;
}
/**
*//TODO:
设置项目的父项状态和子项状态
*@paramevent事件
*
*/
privatefunctioncheckBoxToggleHandler(event:
MouseEvent):
void
{
if(data)
{
varmyListData:
TreeListData=TreeListData(this.listData);
varselectedNode:
Object=myListData.item;
myTree=myListData.ownerasCheckTree;
vartoggle:
Boolean=myCheckBox.selected;
if(toggle)
{
toggleChildren(data,myTree,STATE_CHECKED);
if(myTree.checkBoxOpenItemsOnCheck)
myTree.expandChildrenOf(data,true);
}
else
{
toggleChildren(data,myTree,STATE_UNCHECKED);
if(myTree.checkBoxCloseItemsOnUnCheck)
myTree.expandChildrenOf(data,false);
}
//TODO:
如果所有子项选中时需要选中父项则执行以下代码
if(myTree.checkBoxCascadeOnCheck)
{
varparent:
Object=myTree.getParentItem(data);
if(null!
=parent)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 带选择框 的树checkbox tree 选择 checkbox