加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex Tree组件

发布时间:2020-12-15 04:11:11 所属栏目:百科 来源:网络整理
导读:实现功能: 1、给Tree设置交替行的颜色(alternatingItemColors) 2、设置展开第一级、设置全部展开 3、可任意选中Tree中的某个节点***/根据功能,选择到某个节点 4、设置Tree打开关闭的过渡时间 5、判断点击的节点是不是想要的数据 6、点击某信息,判断Tree中
实现功能:

1、给Tree设置交替行的颜色(alternatingItemColors)

2、设置展开第一级、设置全部展开

3、可任意选中Tree中的某个节点***/根据功能,选择到某个节点

4、设置Tree打开关闭的过渡时间

5、判断点击的节点是不是想要的数据

6、点击某信息,判断Tree中是否存在,存在选中

7、设置不同级别显示不同图标,控制层级前面的三角号是否可存在或替换其他图标(引用外部文件TreeitemRenderer,控制三角号样式?? ????? disclosureOpenIcon="@Embed(source='assets/down.png')"
?? ??? ??? ? disclosureClosedIcon="@Embed(source='assets/right.png')")


效果图:

1、Tree的基础代码:

??? <mx:Tree id="Global_Tree"
?? ??? ??? ? openDuration="1000"
?? ??? ??? ? selectable="true"
?? ??? ??? ? openItems="{this.xml.@SNAME}"
?? ??? ??? ? alternatingItemColors="[#FFFFFF,#EEEEEE]"
?? ??? ??? ? backgroundImage="@Embed(source='assets/tree.png')"
?? ??? ??? ? itemRenderer="cn.com.common.TreeitemRenderer"
?? ??? ??? ? width="250"
?? ??? ??? ? height="100%"
?? ??? ??? ? labelField="@SNAME"
?? ??? ??? ? showRoot="false"
?? ??? ??? ? dataProvider="{xml}"
?? ??? ??? ? itemClick="Global_Tree_itemClickHandler(event)"/>

2、任意选中Tree的某个节点

#1通过数据库返回一个String类型,并转换成XML

			private function findParkingTreeResultHandler(event:ResultEvent):void
			{
				var xmlString:String=event.result as String;
				if (xmlString != "<Root/>")
				{
					this.xml=new XML(xmlString);
					//循环最后一层节点的数据,可循环任意一层
					for each (var treeItem:XML in xml.children().children().children())
					{
						//如果条件成立,选中并获取相关信息
						if (treeItem.@MYDATA == "PAKINGLOT")
						{
							var s:String="";
							Global_Tree.selectedItem=treeItem;
							break;
						}

					}
					//展开Tree
					ExpandAll();
				}
			}

#2展开Tree的第一级或全部展开

			private function ExpandAll():void
			{
				if (!Global_Tree.isItemOpen(XML(this.xml.NODE)))
				{
					this.Global_Tree.expandItem(XML(this.xml.NODE),true,true);
				}
				//展开第一级节点
				//	this.Global_Tree.expandItem(XML(this.xml..NODE.(@MYDATA == "GLOBAL")),true);
				//展开全部节点
				for each (var item:Object in Global_Tree.dataProvider)
				{
					Global_Tree.expandChildrenOf(item,true);
				}

				//获取默认选中的节点信息
				Global_Tree.callLater(function():void
					{
						if (Global_Tree.selectedItem != null)
						{
							parkNameStr=Global_Tree.selectedItem.@SNAME;
							parkIdStr=Global_Tree.selectedItem.@SID;
					
						}
					});
			}

#3点击某信息,判断Tree中是否存在,存在选中,本例中,选择的是一个DataGrid中的

[Bindable]
				private var S_Item:XML;//循环main中的Tree,记录被选中的车站Item
				[Bindable]
				private var AreaXML:XML;//点击区域DataGrid时,存储的该区域XML		
				public function linkbutton1_clickHandler(event:MouseEvent):void
				{
					var str:String=event.target.label;
					AreaXML=XML(globalMain.xml..NODE.(@SNAME == str));//获取与Tree相同的Tree节点
					//	globalMain.Global_Tree.openItems = [XML(globalMain.xml.NODE),XML(globalMain.xml..NODE.(@SNAME == str))];
					Select_Item(str);
					Show_Select();
				}
				
				private function Select_Item(str:String):void
				{
					var treeItem:XML;
					for each (treeItem in globalMain.xml.children().children())  
					{
						if(str == treeItem.@SNAME)
							S_Item=treeItem;
					}
					Show_Select();
				}
				
				private function Show_Select():void
				{
					globalMain.Global_Tree.callLater(function():void
					{
						globalMain.Global_Tree.selectedItem=S_Item;
					});
				}

TreeitemRenderer文件内容:

package cn.com.common
{
	import flash.events.Event;
	import flash.events.MouseEvent;

	import mx.collections.ICollectionView;
	import mx.collections.IList;
	import mx.collections.IViewCursor;
	import mx.controls.Alert;
	import mx.controls.CheckBox;
	import mx.controls.Image;
	import mx.controls.Label;
	import mx.controls.Text;
	import mx.controls.Tree;
	import mx.controls.treeClasses.ITreeDataDescriptor;
	import mx.controls.treeClasses.TreeItemRenderer;
	import mx.controls.treeClasses.TreeListData;

	import spark.components.Button;
	import spark.components.RadioButton;

	/**
	 * TreeItemRenderer
	 * @author Montage
	 */
	public class TreeitemRenderer extends TreeItemRenderer
	{
		public function TreeitemRenderer()
		{
			super();
		}

		/**
		 * 表示CheckBox控件从data中所取数据的字段
		 */

		[Embed(source="../../../assets/tree/treeIcom.png")]
		private var globalicon:Class;
		[Embed(source="../../../assets/tree/areaIcon.png")]
		private var areaicon:Class;
		[Embed(source="../../../assets/tree/parkIcon.png")]
		private var parkicon:Class;
		protected var checkBox:CheckBox;
		protected var checkBox1:Image;
		protected var image1:Image;
		protected var but:Button;

		/**
		 * 构建CheckBox
		 */
		override protected function createChildren():void
		{
			super.createChildren();
			/**checkBox=new CheckBox();
			   addChild(checkBox);
			   checkBox.addEventListener(Event.CHANGE,changeHandler);
			 * */

			checkBox1=new Image();
			checkBox1.width=16;
			checkBox1.height=16;
			addChild(checkBox1);

			image1=new Image();
			image1.width=14;
			image1.height=14;
			addChild(image1);
		}

		private function But_MouSEOut(event:MouseEvent):void
		{

		}

		/**
		 * 点击checkbox时,更新dataProvider
		 * @param event
		   protected function changeHandler(event:Event):void
		   {
		   if (data.@selected != "")
		   {
		   data.@selected=checkBox.selected.toString();
		   var myListData:TreeListData=TreeListData(this.listData);
		   var tree:Tree=Tree(myListData.owner);
		   toggleChildren(data,tree); //级联勾选CheckBox方法
		   }
		   }

		   private function toggleChildren(item:Object,tree:Tree):void
		   {
		   if (item == null)
		   {
		   return;
		   }
		   else
		   {
		   var treeData:ITreeDataDescriptor=tree.dataDescriptor;
		   var tmpTree:IList=tree.dataProvider as IList;
		   item.@selected=checkBox.selected;
		   tmpTree.itemUpdated(item,"_selectedField",item.@selected,checkBox.selected);

		   if (treeData.hasChildren(item))
		   {
		   var children:ICollectionView=treeData.getChildren(item);
		   var cursor:IViewCursor=children.createCursor();
		   while (!cursor.afterLast)
		   {
		   toggleChildren(cursor.current,tree);
		   cursor.moveNext();
		   }
		   }
		   }
		   }
		 */

		/**
		 * 初始化控件时,给checkbox赋值
		 */
		override protected function commitProperties():void
		{
			super.commitProperties();
			/**if (data != null && data.@selected != "")
			   {
			   if (data.@selected == "true")
			   {
			   checkBox.selected=true;
			   }
			   else
			   {
			   checkBox.selected=false;
			   }
			   }
			   else
			   {
			   checkBox.selected=false;
			 }**/
			if (data != null && data.@MYDATA == "GLOBAL")
			{
				image1.source=globalicon;
			}
			else if (data != null && data.@MYDATA == "AREA")
			{
				image1.source=areaicon;
			}
			else if (data != null && (data.@MYDATA == "PAKINGLOT" || data.@MYDATA == "PARTITION"))
			{
				image1.source=parkicon;
			}
		}

		/**
		 * 重置itemRenderer的宽度
		 */
		override protected function measure():void
		{
			super.measure();
			//measuredWidth+=checkBox.getExplicitOrMeasuredWidth();
			measuredWidth+=checkBox1.getExplicitOrMeasuredWidth()+5;
			measuredWidth+=image1.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);

			image1.move(startx,(unscaledHeight - image1.height) / 2);
			label.x=startx + image1.getExplicitOrMeasuredWidth();
			checkBox1.move(label.x + label.getExplicitOrMeasuredWidth(),(unscaledHeight - checkBox1.height) / 2);
		}
	}
}


自定义样式效果图:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读