`
JavaCrazyer
  • 浏览: 3012340 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类

Flex4之Tree开发【一】

阅读更多

1.首先得明白一点,FLEX4的TREE接受的是XML类型的数据,所以无论以何种方式获得XML数据,TREE通过dataProvider=XMLDATA和labelField=@viewname都可以显示出来一棵树

第一种方式,读取本地或远程XML文件

XML文件的格式,大致如下

<?xml version="1.0" encoding="UTF-8"?>
<node  label='所有分类'>
<node  label='中国' value="http://www.baidu.com">
<node label='河南' value="http://www.youdao.com" >
<node  label='信阳' />
<node  label='南阳'/>
</node>
<node  label='河北'>
<node label='保定'/>
<node  label='衡水'/>
</node>
<node label='湖南' >
<node label='长沙'/>
<node  label='湘潭'/>
</node>
<node label='湖北'>
<node label='武汉'/>
<node label='仙桃'/>
</node>
</node>
</node>

 针对上面这个XML格式的文件,Flex4的TREE解析后显示的话会从第二个节点开始解析也即中国那个节点
这种方式的代码我贴出来,大家看下

<?xml version="1.0" encoding="utf-8"?>
<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"
			   creationComplete="SrvTreeList.send();init()">
	<fx:Style>
		Tree {
		folderClosedIcon: ClassReference(null);
		folderOpenIcon: ClassReference(null);
		}
	</fx:Style>

	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			import mx.rpc.events.ResultEvent;

			var XMLTreeList:XML;
			protected function treeService_resultHandler(event:ResultEvent):void
			{   
				//先把数据取出来交给XML,再交给dataProvider,因为dataProvider不能直接解析String为XML
				XMLTreeList=XML(SrvTreeList.lastResult.toString()); 
				MusicTypeTree.dataProvider=XMLTreeList; 

			}
                        //这里我写了一个右键菜单		
                       public function init():void{
			
			 var item: ContextMenuItem=new ContextMenuItem("添加");
			 var menu:ContextMenu=new ContextMenu();
			 menu.customItems.push(item);
			 MusicTypeTree.contextMenu=menu;
			}



			protected function tree1_clickHandler(event:MouseEvent):void
			{
				if(MusicTypeTree.selectedItem.hasOwnProperty("@value" ))
					
				{       //如果某节点中含有VALUE属性,那么就是先跳转页面
					navigateToURL(new URLRequest(MusicTypeTree.selectedItem.@value)); 
				} else
				{ 
					//没有那就展开,如果展开了就收缩
					MusicTypeTree.expandItem(MusicTypeTree.selectedItem,!MusicTypeTree.isItemOpen(MusicTypeTree.selectedItem),true);
				} 
			}

		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
		<s:HTTPService  id="SrvTreeList" url="data/tree.xml" result="treeService_resultHandler(event)" useProxy="false"  resultFormat="xml" />
	</fx:Declarations>
	<!--@label这个非常重要,指定要显示的标题为XML重的label属性值。记住要显示树,httpService的send方法要在组件创建完成后被调用-->
	<mx:Tree x="20" y="10" click="tree1_clickHandler(event)" id="MusicTypeTree"
			 left="5" right="5" 
			 showRoot="false" 
			 labelField="@label"         
			 bottom="5" top="40"
			 
			 ></mx:Tree>
	
</s:Application>

 



 

 第二种方式:将XML内容写到<fx:mxl>标签里面
这种方式我们来看看

<?xml version="1.0" encoding="utf-8"?>
<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"
			   creationComplete="init()">
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
<fx:Script>
	<![CDATA[
		import mx.collections.ICollectionView;
		import mx.events.ListEvent;
		private function tree_itemClick(evt:ListEvent):void {
			var item:Object = Tree(evt.currentTarget).selectedItem;
			if (tree.dataDescriptor.isBranch(item)) {
				tree.expandItem(item, !tree.isItemOpen(item), true);
			}
		}
		private function tree_labelFunc(item:XML):String {
			var children:ICollectionView;
			var suffix:String = "";
			if (tree.dataDescriptor.isBranch(item)) {
				children = tree.dataDescriptor.getChildren(item);
				suffix = " (" + children.length + ")";
			}
			return item[tree.labelField] + suffix;
		}
		
		
	]]>
</fx:Script>
	<fx:Declarations>
		

	<fx:XML id="dp">
		<root>
			<folder label="One">
				<folder label="One.A">
					<item label="One.A.1" />
					<item label="One.A.2" />
					<item label="One.A.3" />
					<item label="One.A.4" />
					<item label="One.A.5" />
				</folder>
				<item label="One.1" />
				<item label="One.2" />
			</folder>
			<folder label="Two">
				<item label="Two.1" />
				<folder label="Two.A">
					<item label="Two.A.1" />
					<item label="Two.A.2" />
				</folder>
			</folder>
		</root>
	</fx:XML>
	</fx:Declarations>
	<mx:Tree id="tree"
			 dataProvider="{dp}"
			 showRoot="false"
			 labelField="@label"
			 labelFunction="tree_labelFunc"
			 width="742"
			 rowCount="6"
			 itemClick="tree_itemClick(event);"  x="14" y="12" height="359"/>
	
</s:Application>

 



 

itemClick方法可以和labelFuntion可以不写,正常的话不写方法就能显示TREE的树形结构了

第三:再看一个例子

<?xml version="1.0" encoding="utf-8"?>
<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:XMLList id="treeData">  
			<node label="Mail Box">  
				<node label="Inbox">  
					<node label="Marketing"/>  
					<node label="Product Management"/>  
					<node label="Personal"/>  
				</node>  
				<node label="Outbox">  
					<node label="Professional"/>  
					<node label="Personal"/>  
				</node>  
				<node label="Spam"/>  
				<node label="Sent"/>  
			</node>     
		</fx:XMLList>  
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			[Bindable] 
			public var selectedNode:XML; 
			
			// Event handler for the Tree control change event. 
			public function treeChanged(event:Event):void { 
				selectedNode=Tree(event.target).selectedItem as XML; 
			} 
		]]>
	</fx:Script>
	<mx:Panel title="Tree Control Example" height="75%" width="75%"   
			  paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10">  
		
		<mx:Label width="100%" color="blue"   
				  text="Select a node in the Tree control."/>  
		
		<mx:HDividedBox width="100%" height="100%">  
			<mx:Tree id="myTree" width="50%" height="100%" labelField="@label"  
					 showRoot="false" dataProvider="{treeData}" change="treeChanged(event)"/>  
			<mx:TextArea height="100%" width="50%"  
						 text="Selected Item: {selectedNode.@label}"/>  
		</mx:HDividedBox>  
		
	</mx:Panel>  
</s:Application>



 

第四,到目前为止,应该可以看出来了XML的显示格式了,如果获取XML文件那么结果要转换成为
var xmlList:XML=XML(event.result.toString());
mytree.dataProvider=xmlList;
要么就是<mx:Tree dataProvider="{xmlList}" >
那么就是
<fx:xml id="xmlid"></fx:xml>
<mx:Tree dataProvider="{xmlid}">

这么多的方式都可以把数据填充到TREE中去

第五:来一个增删拖拽展开,收缩的示例,这里先不涉及到后台,下一篇文章会讲到TREE与JAVA后台数据库的交互操作

<?xml version="1.0" encoding="utf-8"?>
<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"
			   creationComplete="SrvTreeList.send();init()">
	<fx:Style>
		Tree {
		folderClosedIcon: ClassReference(null);
		folderOpenIcon: ClassReference(null);
		}
	</fx:Style>

	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			import mx.controls.Alert;
			import mx.core.DragSource;
			import mx.core.UIComponent;
			import mx.events.DragEvent;
			import mx.managers.DragManager;
			import mx.rpc.events.ResultEvent;

			var XMLTreeList:XML;
			protected function treeService_resultHandler(event:ResultEvent):void
			{   
				//先把数据取出来交给XML,再交给dataProvider,因为dataProvider不能直接解析String为XML
				XMLTreeList=XML(SrvTreeList.lastResult.toString()); 
				MusicTypeTree.dataProvider=XMLTreeList; 

			}

			public function init():void{
			
			 var item: ContextMenuItem=new ContextMenuItem("添加");
			 var menu:ContextMenu=new ContextMenu();
			 menu.customItems.push(item);
			 MusicTypeTree.contextMenu=menu;
			}



			protected function tree1_clickHandler(event:MouseEvent):void
			{
				if(MusicTypeTree.selectedItem.hasOwnProperty("@value" ))
				{ 
					
					var u:URLRequest=new URLRequest(MusicTypeTree.selectedItem.@value);
					//navigateToURL(new URLRequest(MusicTypeTree.selectedItem.@value)); 
					navigateToURL(u);
				} else
				{ 
					//没有那就展开,如果展开了就收缩
					MusicTypeTree.expandItem(MusicTypeTree.selectedItem,!MusicTypeTree.isItemOpen(MusicTypeTree.selectedItem),true);
				} 
			}

            //添加兄弟节点
			protected function addBefore():void
			{
				var xml:XML=MusicTypeTree.selectedItem as XML;
				var text:String=nextName.text;
				if(xml!=null && text.length>0) {
					var parent:XML=xml.parent();
					if(parent!=null) {
						var child:XML=new XML("<node foddersortName=\"\" foddersortId=\"\"  parentid=\"\" />");
						child.@foddersortName=text;
						parent.insertChildBefore(xml,child);
					} else {
						Alert.show("不能选中根节点");
					}
				} else {
					Alert.show("需要先选中节点和填入文字");
				}
			}
			
			protected function addAfter():void
			{
				var xml:XML=MusicTypeTree.selectedItem as XML;
				var text:String=nextName.text;
				if(xml!=null && text.length>0) {
					var parent:XML=xml.parent();
					if(parent!=null) {
						var child:XML=new XML("<node foddersortName=\"\" foddersortId=\"\"  parentid=\"\" />");
						child.@foddersortName=text;
						parent.insertChildAfter(xml,child);
					} else {
						Alert.show("不能选中根节点");
					}
				} else {
					Alert.show("需要先选中节点和填入文字");
				}
			}
			
			protected function addSon():void
			{
				var xml:XML=MusicTypeTree.selectedItem as XML;
				var text:String=nextName.text;
				if(xml!=null && text.length>0) {
					var parent:XML=xml.parent();
					var child:XML=new XML("<node foddersortName=\"\" foddersortId=\"\"  parentid=\"\" />");
					child.@foddersortName=text;
					xml.appendChild(child);
					MusicTypeTree.expandChildrenOf(xml,true);
				} else {
					Alert.show("需要先选中节点和填入文字");
				}			
			}
			protected function editNode():void
			{
				var xml:XML=MusicTypeTree.selectedItem as XML;
				var text:String=nextName.text;
				if(xml!=null && text.length>0) {
					xml.@foddersortName=text;
				} else {
					Alert.show("需要先选中节点和填入文字");
				}			
			}
			protected function deleteNode():void
			{
				var xml:XML=MusicTypeTree.selectedItem as XML;
				if(xml!=null) {
					var list:Array=MusicTypeTree.selectedItems as Array;
					for(var k:int=0;k<list.length;k++) {
						xml=list[k] as XML;
						var parent:XML=xml.parent();
						if(parent!=null) {
							var children:XMLList=parent.children();
							for(var i:int=0;i<children.length();i++) {
								if(children[i]==xml) {
									delete children[i];
									break;
								}
							}
						} else {
							Alert.show("不能选中根节点");
						}
					}
				} else {
					Alert.show("需要先选中节点");
				}			
			}
			protected function selectNode():void
			{
				var text:String=nextName.text;
				if(text.length>0) {
					var items:Array=[];
					var list:XMLList=new XMLList();
					list[0]=MusicTypeTree.dataProvider[0];				
					searchItems(list,text,items);
					MusicTypeTree.selectedItems=items;
				} else {
					Alert.show("输入查找的文字");
				}
			}
			private function searchItems(list:XMLList,find:String,items:Array):void {
				for(var i:int=0;i<list.length();i++) {
					var one:XML=list[i];
					var label:String=one.@foddersortName;
					if(label!=null && label.indexOf(find)>=0) {
						items.push(one);
					}
					searchItems(one.children(),find,items);
				}
			}
			
			
			
			protected function closeAll():void{
				MusicTypeTree.openItems=[];
			
			}
			
			protected function openAll():void{
			
				
				MusicTypeTree.expandChildrenOf(MusicTypeTree.selectedItem,true);
			}


			protected function MusicTypeTree_dragEnterHandler(event:DragEvent):void
			{
				Alert.show(event.target.@foddersortName);
				DragManager.acceptDragDrop(UIComponent(event.currentTarget));
			}


			protected function MusicTypeTree_dragOverHandler(event:DragEvent):void
			{
				
				// r is the visible index in the tree 
				var dropTarget:Tree = Tree(event.currentTarget);
			
				var r:int = dropTarget.calculateDropIndex(event);
				MusicTypeTree.selectedIndex = r;
			
				// retrieving the newly selected node, you can examine it and decide to tell 
				// the user the drop is invalid by changing the feedback.
				var node:XML = MusicTypeTree.selectedItem as XML;
				if( node.@foddersortName == "中国" ) {
					DragManager.showFeedback(DragManager.NONE);
					return;
				}
				// the type of drop - copy, link, or move can be reflected in the feedback as well. 
				// Here the control and shift keys determine that action. 
				if (event.ctrlKey)
					DragManager.showFeedback(DragManager.COPY);
				else if (event.shiftKey)
					DragManager.showFeedback(DragManager.LINK);
				else {
					DragManager.showFeedback(DragManager.MOVE);
				}

			}


			protected function MusicTypeTree_dragDropHandler(event:DragEvent):void
			{
				var xml:XML=MusicTypeTree.selectedItem as XML;
				Alert.show(xml.@foddersortName);
//				var ds:DragSource = event.dragSource;
//				var dropTarget:Tree = Tree(event.currentTarget);
//				// retrieve the data associated with the "items" format. This will be the data that
//				// the dragInitiator has copied into the DragSource.
//				var items:Array = ds.dataForFormat("items") as Array;
//				// determine where in the tree the drop occurs and select that node by the index; followed by 
//				// retrieving the node itself. 
//				var r:int = MusicTypeTree.calculateDropIndex(event);
//				MusicTypeTree.selectedIndex = r;
//				var node:XML = MusicTypeTree.selectedItem as XML;
//				var p:*;
//				// if the selected node has children (it is type==city),
//				// then add the items at the beginning
//				if( MusicTypeTree.dataDescriptor.hasChildren(node) ) {
//					p = node;
//					r = 0;
//				} else {
//					p = node.parent();
//				}
//				// taking all of the items in the DragSouce, insert them into the 
//				// tree using parent p. 
//				for(var i:Number=0; i < items.length; i++) {
//					var insert:XML = <node />;
//					insert.@foddersortName= items[i];
//					//insert.@type = "restaurant";
//					MusicTypeTree.dataDescriptor.addChildAt(p, insert, r+i);
//				}
			}


			protected function MusicTypeTree_dragCompleteHandler(event:DragEvent):void
			{
				MusicTypeTree.selectedIndex = -1;

			}

		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
		<s:HTTPService  id="SrvTreeList" url="data/tree.xml" result="treeService_resultHandler(event)" useProxy="false"  resultFormat="xml" />
	</fx:Declarations>
	<!--@label这个非常重要,指定要显示的标题为XML重的label属性值。记住要显示树,httpService的send方法要在组件创建完成后被调用-->
	<mx:Tree click="tree1_clickHandler(event)" id="MusicTypeTree"
			 left="5" right="845" 
			 showRoot="false" 
			 labelField="@foddersortName"         
			 bottom="243" top="40"
			 dragEnabled="true"
			 dropEnabled="true"
			 allowMultipleSelection="true"
			 allowDragSelection="true"
			 dragDrop="MusicTypeTree_dragDropHandler(event)"
		     dragEnter="MusicTypeTree_dragEnterHandler(event)"
			 ></mx:Tree>
	<s:TextInput id="nextName" x="432" y="40"/>
	<s:Button x="443" y="82" label="增加为哥" click="addBefore()"/>
	<s:Button x="443" y="111" label="增加为弟" click="addAfter()"/>
	<s:Button x="444" y="144" click="addSon()" label="增加为孩子"/>
	<s:Button x="444" y="178" click="editNode()" label="修改节点"/>
	<s:Button x="444" y="211" click="deleteNode()" label="删除节点"/>
	<s:Button x="443" y="244" click="selectNode()" label="选择节点"/>
	<s:Button x="443" y="277" click="closeAll()" label="全部收缩"/>
	<s:Button x="443" y="306" click="openAll()" label="全部展开"/>
	
</s:Application>

 



 

  • 大小: 15.1 KB
  • 大小: 3.8 KB
  • 大小: 8.7 KB
12
3
分享到:
评论
8 楼 JavaCrazyer 2012-12-18  
bcabchappy 写道
非常感谢楼主,雪中送汤啊

不用客气哈
7 楼 bcabchappy 2012-12-17  
非常感谢楼主,雪中送汤啊
6 楼 caiqi7073you 2012-09-11  

caiqi7073you 写道
太好了,正需要……

不错
5 楼 caiqi7073you 2012-09-11  
太好了,正需要……
4 楼 舍予先生 2012-02-23  
    
3 楼 坚强的核桃 2012-01-15  
受用了 大哥 多谢
2 楼 jackshanjack 2011-12-05  
正好最近做项目要用到!总结的很好!
1 楼 游其是你 2011-07-13  
哥们,你讲的太好了!

相关推荐

    flex带复选框的tree,flex checkboxtree

    在Flex CheckboxTree中,每个树节点都有一个与之关联的复选框。当用户点击复选框时,相应的树节点会被选中或取消选中。开发者可以通过监听CheckBoxTree的事件来处理这些变化,例如,当节点的选中状态改变时,更新...

    Flex tree的用法

    Flex Tree组件是Adobe Flex框架中的一个关键元素,用于在用户界面上展示层次结构的数据。它在各种应用程序中广泛使用,特别是在需要展现具有嵌套结构的数据时,如文件系统、组织结构或者复杂的分类信息。让我们深入...

    flex Tree 复选框。

    在Flex编程环境中,Tree组件是一种常用的用户界面元素,它用于展示层次结构的数据。在这个特定的场景中,我们关注的是在Flex Tree中集成复选框功能,这为用户提供了一种直观的方式来选择或操作树形结构中的多个节点...

    flex tree 教程二

    Flex Tree是Adobe Flex框架中的一个组件,用于展示层次结构数据,如文件系统、组织结构或任何其他具有层级关系的数据。本教程将深入讲解Flex Tree组件的使用方法和关键概念,帮助开发者更好地理解和应用这一功能强大...

    flex tree+checkbox级联勾选

    在IT行业中,Flex Tree是一种常用于数据展示和交互的组件,尤其在构建用户界面时,它能够以树形结构清晰地展示层次数据。配合Checkbox(复选框)功能,可以提供用户选择或过滤数据的便利操作。"Flex Tree + Checkbox...

    flex xml生成tree 源码

    描述:此代码示例展示了如何在Flex应用程序中使用XML数据来动态生成一个树形结构(Tree)。Flex是Adobe Systems开发的一款开源框架,用于构建跨平台的桌面和移动设备应用。这段代码通过HTTPService组件从外部XML文件...

    flex_tree扩展_时间轴

    Flex是一种开源的、基于ActionScript的框架,用于构建富互联网应用程序(RIA),它由Adobe Systems开发。时间轴组件是Flex中一种强大的可视化工具,通常用于展示和操作一系列按时间顺序排列的事件或数据。 标题中的...

    flex tree icon

    总结来说,"flex tree icon"是Flex开发中的一个重要概念,涉及到如何在树形组件中添加和管理图标。通过阅读相关博客、理解源码、使用开发工具以及研究示例项目,开发者可以熟练掌握这一技能,从而提升Flex应用的用户...

    flex中 Tree树节点内部拖动实例(此实例限制了什么节点可以拖动及拖动到什么位置)

    开发过程中,开发者可能会使用Adobe Flex Builder或Flash Builder这样的集成开发环境,它们提供了图形化的界面来设计和调试Flex应用。此外,对于源码的调试和优化,还可能需要用到如Flex SDK和Flex Profiler等工具...

    flex中tree和checkbox结合使用的插件

    4. 插件实现:本压缩包提供的插件可能是对Flex Tree组件的一个扩展,添加了Checkbox功能。可能包括以下关键部分: - TreeNode类的扩展:可能扩展了默认的TreeNode类,添加了Checkbox属性和相关的事件处理。 - ...

    flex tree 拖拽

    Flex Tree 是一种基于 Adobe Flex 技术实现的可交互树形数据结构组件,它允许用户以图形化的方式查看和操作层次结构数据。在 Flex 应用中,Tree 控件经常用于展示具有层级关系的数据,例如文件系统、组织结构或者...

    flex的combBox添加tree

    在Flex开发中,CombBox是一种常用的UI组件,它结合了下拉列表(Dropdown List)和文本输入框(Text Input)的功能。当你需要提供用户一个可选的列表,并允许他们自由输入时,CombBox是一个很好的选择。然而,有时候...

    Flex Tree组件的实线连接线

    Flex Tree组件是Adobe Flex框架中的一个关键元素,用于展示层次结构数据。在默认情况下,Tree组件的节点之间通常使用虚线进行连接,以表示它们之间的层级关系。然而,有时候我们可能需要自定义这些连接线,比如将...

    flex中tree的数据源是xml

    在Flex应用开发过程中,我们常常需要用到树形结构(Tree)来展示分层数据。为了使数据呈现更加灵活且高效,通常会采用XML作为数据交换格式,这是因为XML具备良好的可读性和扩展性,能够方便地被解析与处理。 #### ...

    Flex Tree增加虚线连接

    在IT行业中,Flex Tree是一种常见的数据可视化组件,用于展示层级结构的数据,比如组织架构、文件系统或树形菜单。在Flex Tree中,连接线通常用来表示节点间的父子关系,而"Flex Tree增加虚线连接"则涉及到如何为...

    Flex Tree 源码

    ### 一、理解 Flex、Java 和 Tree 代码 #### 1.1 Flex 简介 Flex 是一种用于开发和部署跨平台的丰富互联网应用程序 (RIA) 的开源框架。它支持创建动态用户界面,并且可以与 Java 后端服务进行无缝集成。 #### 1.2 ...

    Flex 4.5 实现tree拖拽到任意组建

    在Flex 4.5开发中,拖放(Drag & Drop)功能是一项常用且重要的交互设计技术,它允许用户通过鼠标操作将元素从一个位置移动到另一个位置,这在构建用户界面时大大提升了用户体验。本教程将详细介绍如何在Flex 4.5中...

    jquery+flex制作的Tree插件

    小插件主要是WEB开发显示一棵树结构,为了美观方便使用自己动手写了这个小插件,第一次写这玩意。只要根据规定的数据格式XML传入便可生成一棵美观的树,可以选择是否要显示CHECKBOX组件,里边有开发中常用的回调方法...

    Flex中Tree组件的数据源举例(xml,array,object)

    在Flex开发中,Tree组件是一种常用的用户界面元素,用于展示层次结构的数据。它通常用于文件系统、组织结构或任何有层级关系的数据展示。本篇将详细介绍如何为Flex中的Tree组件设置不同的数据源,包括XML、Array和...

    Flex右键菜单 flex tree 右键菜单 源码

    Flex是一种基于ActionScript和MXML的开源框架,用于构建富互联网应用程序(RIA)。在Flex中,右键菜单是用户交互的重要组成部分,特别是在数据可视化和树形结构的数据展示中,如Flex Tree组件。本文将深入探讨如何在...

Global site tag (gtag.js) - Google Analytics