Flex4_Tree组件1(添加、删除、展开、关闭、右键菜单)
1、屏蔽系统菜单:工程目录“html-template”文件夹-->“index.template.html”文件中,在var params = {};语句下添加新语句:
params.wmode = "opaque";
2、新建Tree右键菜单工具类:TreeRightClickManager.as

package com.th.rightClickManager
{
import flash.display.InteractiveObject;
import flash.events.ContextMenuEvent;
import flash.events.MouseEvent;
import flash.external.ExternalInterface; import mx.core.Application;
import mx.core.FlexGlobals; public class TreeRightClickManager
{
static private var rightClickTarget:*;
static public const RIGHT_CLICK:String = "rightClick";
static private const javascript:XML =
<script>
<![CDATA[
function(flashObjectId)
{
var RightClick = {
init: function (flashObjectId) {
this.FlashObjectID = flashObjectId;
this.Cache = this.FlashObjectID;
if(window.addEventListener){
window.addEventListener("mousedown", this.onGeckoMouse(), true);
} else {
document.getElementById(this.FlashObjectID).parentNode.onmouseup = function() { document.getElementById(RightClick.FlashObjectID).parentNode.releaseCapture(); }
document.oncontextmenu = function(){ if(window.event.srcElement.id == RightClick.FlashObjectID) { return false; } else { RightClick.Cache = "nan"; }}
document.getElementById(this.FlashObjectID).parentNode.onmousedown = RightClick.onIEMouse;
}
},
/**
* GECKO / WEBKIT event overkill
* @param {Object} eventObject
*/
killEvents: function(eventObject) {
if(eventObject) {
if (eventObject.stopPropagation) eventObject.stopPropagation();
if (eventObject.preventDefault) eventObject.preventDefault();
if (eventObject.preventCapture) eventObject.preventCapture();
if (eventObject.preventBubble) eventObject.preventBubble();
}
},
/**
* GECKO / WEBKIT call right click
* @param {Object} ev
*/
onGeckoMouse: function(ev) {
return function(ev) {
if (ev.button != 0) {
RightClick.killEvents(ev);
if(ev.target.id == RightClick.FlashObjectID && RightClick.Cache == RightClick.FlashObjectID) {
RightClick.call();
}
RightClick.Cache = ev.target.id;
}
}
},
/**
* IE call right click
* @param {Object} ev
*/
onIEMouse: function() {
if (event.button > 1) {
if(window.event.srcElement.id == RightClick.FlashObjectID && RightClick.Cache == RightClick.FlashObjectID) {
RightClick.call();
}
document.getElementById(RightClick.FlashObjectID).parentNode.setCapture();
if(window.event.srcElement.id)
RightClick.Cache = window.event.srcElement.id;
}
},
/**
* Main call to Flash External Interface
*/
call: function() {
document.getElementById(this.FlashObjectID).rightClick();
}
} RightClick.init(flashObjectId);
}
]]>
</script>; public function TreeRightClickManager()
{
return;
} static public function regist() : Boolean
{
if (ExternalInterface.available)
{
ExternalInterface.call(javascript, ExternalInterface.objectID);
ExternalInterface.addCallback("rightClick", dispatchRightClickEvent);
//Application.application.addEventListener(MouseEvent.MOUSE_OVER,mouseOverHandler);
FlexGlobals.topLevelApplication.addEventListener(MouseEvent.MOUSE_OVER,mouseOverHandler); }
return true;
} static private function mouseOverHandler(event:MouseEvent) : void
{
rightClickTarget = InteractiveObject(event.target);
return;
} static private function dispatchRightClickEvent() : void
{
var event:ContextMenuEvent;
if(rightClickTarget !=null)
{
event =new ContextMenuEvent(RIGHT_CLICK,true,false, rightClickTarget as InteractiveObject, rightClickTarget as InteractiveObject);
rightClickTarget.dispatchEvent(event);
}
return;
} }
}

3、Flex文件

<?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"
initialize="init()">
<fx:Script>
<![CDATA[
import com.th.rightClickManager.TreeRightClickManager; import mx.controls.Alert;
import mx.controls.Menu;
import mx.controls.listClasses.IListItemRenderer;
import mx.events.MenuEvent; [Event(name="rightClick",type="flash.events.ContextMenuEvent")] //右键菜单图标,现在没用着,删了也行
[Embed("images/myIco.png")]
private var menu_SP_add:Class;
[Embed("images/myIco.png")]
private var menu_TZ_add:Class;
[Embed("images/myIco.png")]
private var menu_Folder_add:Class;
[Embed("images/myIco.png")]
private var menu_FJ_uploadsingle:Class; private var rightClickRegisted:Boolean = false;
private var menu:Menu;
[Bindable]
private var studetXml:XML; private function init():void{
studetXml=
<nj label="一年级" id="n1" lx="0">
<bj label="1班" id="b1" lx="1">
<student label="刘备" id="s1" lx="2"/>
<student label="张飞" id="s2" lx="2"/>
<student label="关羽" id="s3" lx="2"/>
<student label="诸葛亮" id="s4" lx="2"/>
</bj>
</nj>;
if (!rightClickRegisted){
TreeRightClickManager.regist();
rightClickRegisted = true;
}
//加载右击事件
studentTree.addEventListener(TreeRightClickManager.RIGHT_CLICK,treeRightClickHandler);
} //树右击事件
private function treeRightClickHandler(event:ContextMenuEvent):void
{
tree_onRightClicked(event);
tree_removeMenu();
tree_InitMenu();
} private function tree_onRightClicked(e:ContextMenuEvent):void
{
var rightClickItemRender:IListItemRenderer;
var rightClickIndex:int;
if(e.mouseTarget is IListItemRenderer)
{
rightClickItemRender = IListItemRenderer(e.mouseTarget); } else if(e.mouseTarget.parent is IListItemRenderer)
{
rightClickItemRender = IListItemRenderer(e.mouseTarget.parent);
}
if(rightClickItemRender != null)
{
rightClickIndex = studentTree.itemRendererToIndex(rightClickItemRender);
if(studentTree.selectedIndex != rightClickIndex)
{
studentTree.selectedIndex = rightClickIndex;
}
}
} //删除右键菜单
private function tree_removeMenu():void
{
if(menu!=null)
{
menu.hide();
menu.removeEventListener(MenuEvent.ITEM_CLICK,tree_MenuItemSelected);
menu=null;
}
} //生成右键菜单
private var selectedId:String="";
private var selectedLabel:String="";
private function tree_InitMenu():void
{
var currentItem:XML=studentTree.selectedItem as XML;
selectedId=currentItem.@id;
selectedLabel=currentItem.@label;
var lx:String=currentItem.@lx; menu = Menu.createMenu(this, tree_createMenuItems(lx), false);
menu.iconField="itemIcon";//右键菜单的图标
menu.labelField="label"; //右键菜单的名称
menu.variableRowHeight = true;
menu.addEventListener(MenuEvent.ITEM_CLICK, tree_MenuItemSelected); //右键菜单的事件
var point:Point = new Point(mouseX,mouseY);
point = localToGlobal(point);
menu.show(point.x,point.y); //显示右键菜单
} //根据节点不同,生成不同的菜单
private function tree_createMenuItems(lx:String):Array {
var menuItems:Array = new Array();
var menuXs:Object= new Object;
menuXs.label = '刷新';
//menuXs.itemIcon = this.menu_TZ_add; //给菜单加图标
menuItems.push(menuXs);
var menuExpand:Object=new Object();
menuExpand.label="展开当前节点";
menuItems.push(menuExpand);
var menuClose:Object=new Object();
menuClose.label="关闭当前节点";
menuItems.push(menuClose);
var menuExpandAll:Object=new Object();
menuExpandAll.label="展开所有节点";
menuItems.push(menuExpandAll);
var menuCloseAll:Object=new Object();
menuCloseAll.label="关闭所有节点";
menuItems.push(menuCloseAll);
switch(lx){
case "0":
var menuAddNj:Object = new Object;
menuAddNj.label = "添加年级";
menuItems.push(menuAddNj);
var menuDelNj:Object=new Object();
menuDelNj.label="删除年级";
menuItems.push(menuDelNj);
break;
case "1":
var menuAddBj:Object=new Object();
menuAddBj.label="添加班级";
menuItems.push(menuAddBj);
var menuDelBj:Object=new Object();
menuDelBj.label="删除班级";
menuItems.push(menuDelBj);
var menuAddStu:Object=new Object();
menuAddStu.label="添加学生";
menuItems.push(menuAddStu);
break;
case "2":
var menuEditStu:Object=new Object();
menuEditStu.label="修改学生";
menuItems.push(menuEditStu);
var menuDelStu:Object=new Object();
menuDelStu.label="删除学生";
menuItems.push(menuDelStu);
break;
} return menuItems; } //点击菜单,相应方法
private function tree_MenuItemSelected(event:MenuEvent):void {
var menuItem:Object = event.menu.selectedItem as Object;
switch(menuItem.label)
{
case "展开当前节点":
nodeExpand();
break;
case "关闭当前节点":
nodeClose();
break;
case "展开所有节点":
nodeExpandAll();
break;
case "关闭所有节点":
nodeCloseAll();
break;
case "删除学生":
delStuNode();
break;
case "添加学生":
addStuNode();
break; }
} //改变事件
private function treeChanged(event:Event):void{
var selectedTreeNode:XML;
selectedTreeNode=Tree(event.target).selectedItem as XML;
Alert.show("您点击了:"+selectedTreeNode.@label,"提示"); } //展开当前节点
private function nodeExpand():void{
studentTree.expandItem(studentTree.selectedItem,true);
} //关闭当前节点
private function nodeClose():void{
studentTree.expandItem(studentTree.selectedItem,false); } //展开所有节点
private function nodeExpandAll():void{
for each(var item:XML in studentTree.dataProvider) {
studentTree.expandChildrenOf(item,true);
}
} //关闭所有节点
private function nodeCloseAll():void{
//方法1:studentTree.openItems = [];
//方法2:
for each(var item:XML in studentTree.dataProvider) {
studentTree.expandChildrenOf(item,false);
}
} //删除学生
private function delStuNode():void{
Alert.show("删除学生 ID="+selectedId+" 名称="+selectedLabel,"提示");
var delStuItemPar:Object=new Object();
delStuItemPar=studentTree.selectedItem.parent();
var delStuInx:int=studentTree.selectedItem.childIndex();
studentTree.dataDescriptor.removeChildAt(delStuItemPar,studentTree.selectedItem,delStuInx,studentTree.dataProvider);
} //添加学生
private function addStuNode():void{
var newStuXML:XML=<student label="新学生" id="s5" lx="2"/>;
(studentTree.selectedItem as XML).appendChild(newStuXML);
} ]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<s:Panel x="25" y="23" width="250" height="448" title="学生">
<mx:Tree id="studentTree" left="0" top="0" width="100%" height="100%" labelField="@label"
change="treeChanged(event)" dataProvider="{studetXml}" allowMultipleSelection ="true"/>
</s:Panel>
</s:Application>

4、效果图:

Flex4_Tree组件1(添加、删除、展开、关闭、右键菜单)的更多相关文章
- Extjs 4.2 panel 添加 click 事件及右键菜单
listeners: { render: function(c) { c.body.on('click', function() { //TODO 添加点击事件功能 }); c.body.on('co ...
- EasyUI 表格点击右键添加或刷新 绑定右键菜单
例1 在HTML页面中设置一个隐藏的菜单(前提是已经使用封装的Easyui) 代码: <div id="contextMenu_jygl" class="easyu ...
- 如何将程序添加到Windows桌面右键菜单
在Windows桌面上右键单击鼠标时,将显示默认菜单.如果您想要将其它程序添加到Windows桌面右键菜单中,则可以按照以下步骤执行: 运行WinUtilities上下文菜单管理器 点击添加 选择菜单 ...
- 手动添加git到目录右键菜单
1.通过在"运行"中输入'regedit',打开注册表. 2.找到[HKEY_CLASSES_ROOT\Directory\Background]. 3.在[Backgroun ...
- Flex4_Tree组件2(添加多选框、修改树图标)
1.新建AS类,用于为Tree生成复选框,及一些选择事件. package com.th.myUtils { import flash.events.Event; import flash.event ...
- 手动添加Git Bash到右键菜单
1. 打开注册表. 2. 找到[HKEY_CLASSES_ROOT\Directory\Background]. 3. 在[Background]下如果没有[shell],则右键-新建项[shell] ...
- Arcengine 二次开发添加右键菜单
最近在搞arcengine 二次开发,遇到了好多问题,也通过网上查资料试着慢慢解决了,把解决的步骤记录下来,有需要帮助的可以看一下,也欢迎各位来批评指正. 想给自己的map application在图 ...
- jqGrid添加删除功能(不和数据库交互)
jqGrid添加删除功能(不和数据库交互) 一.背景需求 项目中需要在前端页面动态的添加行,删除行,上下移动行等,同时还不和数据库交互.一直在用jqGrid展示表格的我们,从没有深入的研究过它,当然看 ...
- 删除Open with Atom右键菜单
特别特别讨厌Atom的右键菜单,叕没有设置项可以去掉,烦!安装完RegScanner v2.15汉化版之后,开始搜索删除Atom的右键菜单 1.打开E:\RegScanner2.加载配置文件 E:\R ...
随机推荐
- 博客笔记(blog notebook)
1. 机器学习 2. NLP 3. code 实际好人 实际坏人 预测百分比 预测好人 \(p_GF^c(s_c\|G)\) \(p_BF^c(s_c\|B)\) \(F^c(s_c)\) 预测坏人 ...
- [python学习篇][书籍学习][python standrad library][内置类型]对象测试真值,布尔值操作, 比较操作
几乎所有对象都可以比较.测试真值.转换为字符串(其实就是用repr()函数,或略有差异的str()函数来转换) 1 对象是否为真 任何对象都可以测试真值,用于if或while的条件或下面布尔运算的操作 ...
- 【转】UML中的几种关系详细解析
UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中, ...
- 设计模式(二 & 三)工厂模式:1-简单工厂模式
模拟场景: 需要构造一个运算器(Operation),分别负责加减乘除的运算功能. 思想: 这里需要构造四个 Operation,可以使用 Factory 去统一创建这四个对象. 所需要构造的对象是运 ...
- ubuntu系统14.04安装php5
背景: 阅读新闻 Ubuntu 14.04 LTS 安装 LNMP Nginx\PHP5 (PHP-FPM)\MySQL [日期:2014-05-27] 来源:imcn.me 作者:L ...
- POJ——1321棋盘问题(DFS+回溯)
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 33272 Accepted: 16456 Description 在一 ...
- java面试题之osi七层网络模型,五层网络模型,每层分别有哪些协议(阿里面试题)
OSI七层网络模型 TCP/IP五层网络模型 对应网络协议 应用层 应用层 HTTP.TFTP.FTP.NFS.WAIS.SMTP 表示层 应用层 Telnet.Rlogin.SNMP.Gopher ...
- PHP中的验证码类(验证码功能设计之二)
运行结果: <!--vcode.class.php内容--> <?php class Vcode { private $width; //宽 private $height; //高 ...
- php 爬取网页列表 QueryList
主流的方式是 phpQuery 今天使用了 QueryList,是在PHPQuery的基础上进行了封装,现在最新的版本是4.0,但是要求PHP>7.0.就用了旧版的3.0 3.0文档:https ...
- Javascript的函数直接量定义
在Javascript中允许函数通过直接量来定义.一般情况下,我们定义函数时,最常见的方式是通过function语句进行定义,例如: function sum(a,b){ return a+b ...