主程序mxml:

  1 <?xml version="1.0" encoding="utf-8"?>
  2 
  3 <!--功能描述:结合tree拓展右键功能 必须在index.template.html设置params.wmode = "opaque"以屏蔽flash右键;-->
  4 
  5 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
  6                xmlns:s="library://ns.adobe.com/flex/spark" 
  7                xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
  8                initialize="init()">
  9     <fx:Script>
 10         <![CDATA[
 11             import com.render.TreeRightClickManager;
 12             
 13             import mx.controls.Alert;
 14             import mx.controls.Menu;
 15             import mx.controls.listClasses.IListItemRenderer;
 16             import mx.events.MenuEvent;
 17             
 18             [Event(name="rightClick",type="flash.events.ContextMenuEvent")]
 19             
 20             private var rightClickRegisted:Boolean = false;
 21             private var menu:Menu;
 22             [Bindable]
 23             private var data:XML;
 24             
 25             private function init():void{
 26                 data=
 27                     <actor label="周星驰" level="0">
 28                         <year label="1988" level="1">
 29                             <item label="《霹雳先锋》香港票房8916612 " level="2"/>
 30                             <item label="《捕风汉子》香港票房3149395" level="2"/>
 31                              <item label="《最佳女婿》香港票房5807710" level="2"/>
 32                         </year>
 33                     </actor>;
 34                 if (!rightClickRegisted){  
 35                     TreeRightClickManager.regist();
 36                     rightClickRegisted = true;  
 37                 } 
 38                 //加载右击事件
 39                 tree.addEventListener(TreeRightClickManager.RIGHT_CLICK,treeRightClickHandler);
 40             }
 41             
 42             /**
 43              *树右击事件 
 44              **/
 45             private function treeRightClickHandler(event:ContextMenuEvent):void
 46             {
 47                 tree_onRightClicked(event); 
 48                 tree_removeMenu();
 49                 tree_InitMenu();
 50             }
 51             
 52             
 53             private function tree_onRightClicked(e:ContextMenuEvent):void 
 54             {  
 55                 var rightClickItemRender:IListItemRenderer;    
 56                 var rightClickIndex:int;  
 57                 if(e.mouseTarget is IListItemRenderer)
 58                 {          
 59                     rightClickItemRender = IListItemRenderer(e.mouseTarget);         }
 60                     
 61                 else if(e.mouseTarget.parent is IListItemRenderer)
 62                 {          
 63                     rightClickItemRender = IListItemRenderer(e.mouseTarget.parent);    
 64                 }    
 65                 if(rightClickItemRender != null)
 66                 {    
 67                     rightClickIndex = tree.itemRendererToIndex(rightClickItemRender);    
 68                     if(tree.selectedIndex != rightClickIndex)
 69                     {    
 70                         tree.selectedIndex = rightClickIndex;   
 71                     }   
 72                 } 
 73             }
 74             
 75             /**
 76              * 删除右键菜单
 77              **/
 78             private function tree_removeMenu():void 
 79             {  
 80                 if(menu!=null)  
 81                 {  
 82                     menu.hide();
 83                     menu.removeEventListener(MenuEvent.ITEM_CLICK,tree_MenuItemSelected);  
 84                     menu=null;  
 85                 }  
 86             }
 87             
 88             /**
 89              * 生成右键菜单
 90              **/
 91             private var selectedId:String="";
 92             private var selectedLabel:String="";
 93             private function tree_InitMenu():void
 94             {
 95                 var currentItem:XML=tree.selectedItem as XML;
 96                 selectedId=currentItem.@id;
 97                 selectedLabel=currentItem.@label;
 98                 var level:String=currentItem.@level;
 99                 
100                 menu = Menu.createMenu(this, tree_createMenuItems(level), false);
101                 menu.iconField="itemIcon";//右键菜单的图标
102                 menu.labelField="label";  //右键菜单的名称 
103                 menu.variableRowHeight = true;     
104                 menu.addEventListener(MenuEvent.ITEM_CLICK, tree_MenuItemSelected);  //右键菜单的事件
105                 var point:Point = new Point(mouseX,mouseY);  
106                 point = localToGlobal(point);   
107                 menu.show(point.x,point.y);  //显示右键菜单
108             }
109             
110             
111             /**
112              * 根据节点不同,生成不同的菜单
113              **/
114             private function tree_createMenuItems(level:String):Array  
115                 
116             {  
117                 var menuItems:Array = new Array();
118                 var menuXs:Object= new Object;  
119                 menuXs.label = '刷新';
120                 //menuXs.itemIcon = this.menu_TZ_add;  //给菜单加图标
121                 menuItems.push(menuXs);
122                 var menuExpand:Object=new Object();
123                 menuExpand.label="展开当前节点";
124                 menuItems.push(menuExpand);
125                 var menuClose:Object=new Object();
126                 menuClose.label="关闭当前节点";
127                 menuItems.push(menuClose);
128                 var menuExpandAll:Object=new Object();
129                 menuExpandAll.label="展开所有节点";
130                 menuItems.push(menuExpandAll);
131                 var menuCloseAll:Object=new Object();
132                 menuCloseAll.label="关闭所有节点";
133                 menuItems.push(menuCloseAll);
134                 switch(level){
135                     case "0":
136                         var menuAddNj:Object = new Object;  
137                         menuAddNj.label = "添加明星";
138                         menuItems.push(menuAddNj);
139                         var menuDelNj:Object=new Object();
140                         menuDelNj.label="删除明星";
141                         menuItems.push(menuDelNj);
142                         break;
143                     case "1":
144                         var menuAddBj:Object=new Object();
145                         menuAddBj.label="添加年份";
146                         menuItems.push(menuAddBj);
147                         var menuDelBj:Object=new Object();
148                         menuDelBj.label="删除年份";
149                         menuItems.push(menuDelBj);
150                         var menuAddStu:Object=new Object();
151                         menuAddStu.label="添加影片";
152                         menuItems.push(menuAddStu);
153                         break;
154                     case "2":
155                         var menuEditStu:Object=new Object();
156                         menuEditStu.label="修改影片";
157                         menuItems.push(menuEditStu);
158                         var menuDelStu:Object=new Object();
159                         menuDelStu.label="删除影片";
160                         menuItems.push(menuDelStu);
161                         break;
162                 }            
163                 
164                 return menuItems;
165                 
166             }
167             /**
168              * 点击菜单,相应方法 
169              **/
170             private function tree_MenuItemSelected(event:MenuEvent):void
171                 
172             {
173                 var menuItem:Object = event.menu.selectedItem as Object;
174                 switch(menuItem.label)
175                 {
176                     case "展开当前节点":
177                         nodeExpand();
178                         break;
179                     case "关闭当前节点":
180                         nodeClose();
181                         break;
182                     case "展开所有节点":
183                         nodeExpandAll();
184                         break;
185                     case "关闭所有节点":
186                         nodeCloseAll();
187                         break;
188                     case "删除影片":
189                         delStuNode();
190                         break;
191                     case "添加影片":
192                         addStuNode();
193                         break;
194                     
195                 }
196             }
197             
198             
199             private function treeChanged(event:Event):void{
200                 var selectedTreeNode:XML;
201                 selectedTreeNode=Tree(event.target).selectedItem as XML;
202                 //Alert.show("您点击了:"+selectedTreeNode.@label,"提示");
203                 
204             }
205 
206             /**
207              * 展开当前节点
208              **/
209             private function nodeExpand():void{  
210                 tree.expandItem(tree.selectedItem,true);  
211             }
212             
213             /**
214              * 关闭当前节点
215              **/
216             private function nodeClose():void{  
217                 tree.expandItem(tree.selectedItem,false);
218                 
219             } 
220             
221             /**
222              * 展开所有节点
223              **/
224             private function nodeExpandAll():void{
225                 for each(var item:XML in tree.dataProvider) {
226                     tree.expandChildrenOf(item,true); 
227                 }
228             }
229             
230             /**
231              * 关闭所有节点
232              **/
233             private function nodeCloseAll():void{
234                 //方法1:studentTree.openItems = [];
235                 //方法2:
236                 for each(var item:XML in tree.dataProvider) {
237                     tree.expandChildrenOf(item,false);
238                 }
239             }
240             
241             /**
242              * 删除节点
243              **/
244             private function delStuNode():void{
245                 Alert.show("删除影片 ID="+selectedId+"  名称="+selectedLabel,"提示",4,null,ok);
246                 function ok():void
247                 {
248                     var delStuItemPar:Object=new Object();
249                     delStuItemPar=tree.selectedItem.parent();
250                     var delStuInx:int=tree.selectedItem.childIndex();
251                     tree.dataDescriptor.removeChildAt(delStuItemPar,tree.selectedItem,delStuInx,tree.dataProvider);   
252                 }
253                 
254             }
255             
256             /**
257              * 添加影片
258              **/
259             private function addStuNode():void{
260                 var node:XML=<item label="新影片" level="2"/>;
261                 (tree.selectedItem as XML).appendChild(node); 
262             }
263             
264         ]]>
265     </fx:Script>
266     <fx:Declarations>
267         <!-- 将非可视元素(例如服务、值对象)放在此处 -->
268     </fx:Declarations>
269     <s:Panel x="25" y="23" width="250" height="448" title="喜剧之王">
270         <mx:Tree id="tree" left="0" top="0" width="100%" height="100%" labelField="@label" change="treeChanged(event)" dataProvider="{data}" allowMultipleSelection ="true"/>
271     </s:Panel>
272 </s:Application>
View Code

相关文章: