带选择框 的树checkbox tree.docx

上传人:b****8 文档编号:30158332 上传时间:2023-08-05 格式:DOCX 页数:28 大小:65.48KB
下载 相关 举报
带选择框 的树checkbox tree.docx_第1页
第1页 / 共28页
带选择框 的树checkbox tree.docx_第2页
第2页 / 共28页
带选择框 的树checkbox tree.docx_第3页
第3页 / 共28页
带选择框 的树checkbox tree.docx_第4页
第4页 / 共28页
带选择框 的树checkbox tree.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

带选择框 的树checkbox tree.docx

《带选择框 的树checkbox tree.docx》由会员分享,可在线阅读,更多相关《带选择框 的树checkbox tree.docx(28页珍藏版)》请在冰豆网上搜索。

带选择框 的树checkbox tree.docx

带选择框的树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)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1