如何在TWaver Flex中定制Tree的tooltip

news/2024/5/19 19:39:10 标签: tree, flex, function, timer, application, null
tree.png">

如果您显示过Tree的ToolTip,会发现这个tooltip离鼠标太远了;而且也无法跟随鼠标一起移动;最重要的是,如果想动态更改tooltip也很麻烦。

tree" src="http://twaver.servasoft.com/wp-content/uploads/2012/09/tree.png" alt="" width="160" height="115" />

还是自定义ToolTip灵活:

1. 设置tree.toolTipFunction,关闭默认的tooltip

tree.toolTipFunction = function(element:IData):String {
	return null;
}

2. 监听mousemove事件,动态显示、隐藏以及更新tooltip

tree.addEventListener(MouseEvent.MOUSE_MOVE, function(e:MouseEvent):void {
	handleMouseMove(e);
});

3. 由于tree.getTreeDataByMouseEvent方法中,即使鼠标在空白处也有返回值,所以需要特殊处理一下,判断鼠标是否在icon或者text上:

private function showToolTip():Boolean {
	var obj:InteractiveObject = null;
	var mousePoint:Point = new Point(stage.mouseX, stage.mouseY);
	var objects:Array = stage.getObjectsUnderPoint(mousePoint);
	for (var i:int = objects.length-1; i>=0; i--) {
		if (objects[i] is InteractiveObject) {
			obj = objects[i] as InteractiveObject;
			break;
		} else {
			if (objects[i] is Shape && (objects[i] as Shape).parent) {
				obj = (objects[i] as Shape).parent;
				break;
			}
		}
	}
	return obj is UIComponent || obj is UITextField;
}

效果如下:

完整代码:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
				xmlns:tw="http://www.servasoftware.com/2009/twaver/flex"
				paddingLeft="0" paddingRight="0" paddingTop="0" paddingBottom="0" backgroundColor="#FFFFFF"
				creationComplete="init()">
	<mx:Script>
		<![CDATA[
			import mx.core.IToolTip;
			import mx.core.UIComponent;
			import mx.core.UITextField;
			import mx.managers.ToolTipManager;

			import twaver.DataBox;
			import twaver.IData;
			import twaver.Link;
			import twaver.Node;
			import twaver.controls.TreeData;

			private var _toolTip:IToolTip;
			private var _lastData:IData = null;
			private var _timer:uint = 0;

			private function init():void {
				var box:DataBox = tree.dataBox;
				tree.toolTipFunction = function(element:IData):String {
					return null;
				};
				tree.addEventListener(MouseEvent.MOUSE_MOVE, function(e:MouseEvent):void {
					handleMouseMove(e);
				});
				tree.callLater2(function():void {
					tree.expandAll();
				});

				var from:Node = new Node();
				from.name = "From";
				from.toolTip = "From";
				from.centerLocation = new Point(100, 100);
				box.add(from);
				var to:Node = new Node();
				to.name = "To";
				to.toolTip = "To";
				to.centerLocation = new Point(300, 400);
				box.add(to);
				var link:Link = new Link(from, to);
				link.name = "Link";
				link.toolTip = "Link";
				box.add(link);
			}

			private function handleMouseMove(e:MouseEvent):void {
				var treeData:TreeData = tree.getTreeDataByMouseEvent(e);
				var data:IData = (showToolTip() && treeData && treeData.data) ? treeData.data : null;
				if(data != null){
					var x:Number = tree.mouseX + 10, y:Number = tree.mouseY + 10;
					if(data != _lastData){
						if(_toolTip != null){
							ToolTipManager.destroyToolTip(_toolTip);
						}
						_toolTip = ToolTipManager.createToolTip(data.toolTip, x, y);
						if(_timer){
							clearTimeout(_timer);
						}
						_timer = setTimeout(function():void {
							_timer = 0;
							if(_toolTip){
								_toolTip.text = "test\n" + _toolTip.text;
							}
						}, 1000);
					}else{
						_toolTip.x = x;
						_toolTip.y = y;
					}

				}else{
					if(_toolTip != null){
						ToolTipManager.destroyToolTip(_toolTip);
					}
					_toolTip = null;
				}
				_lastData = data;
			}

			private function showToolTip():Boolean {
				var obj:InteractiveObject = null;
				var mousePoint:Point = new Point(stage.mouseX, stage.mouseY);
				var objects:Array = stage.getObjectsUnderPoint(mousePoint);
				for (var i:int = objects.length-1; i>=0; i--) {
					if (objects[i] is InteractiveObject) {
						obj = objects[i] as InteractiveObject;
						break;
					} else {
						if (objects[i] is Shape && (objects[i] as Shape).parent) {
							obj = (objects[i] as Shape).parent;
							break;
						}
					}
				}
				return obj is UIComponent || obj is UITextField;
			}
		]]>
	</mx:Script>
	<tw:Tree id="tree" width="30%" height="100%"/>
</mx:Application>

完整代码见附件:见原文最下方

treeSkill">

http://www.niftyadmin.cn/n/1765828.html

相关文章

TWaver With JavaFX

JavaFX Script被抛弃以后&#xff0c;很久不关心JavaFX了&#xff0c;偶然发现JavaFX已经发展到2.2&#xff0c;而且已经绑定到JDK7中&#xff0c;看来Oracle对它还是蛮重视的。 看到有人在论坛提问TWaver有没有JavaFX版本&#xff0c;于是去Oracle网站上逛了一下&#xff0c;…

TWaver局部自动布局及嵌套Group处理

TWaver提供了一些布局算法帮助我们快速为网元设置位置&#xff0c;很多情况下已经够用了&#xff0c;但是对于一些复杂的布局还需要我们自己做一些处理&#xff0c;看下面这个例子&#xff1a; 运行截图&#xff1a; 这个时候直接使用TNetwork#doLayout就不好使了&#xff0c;…

TWaver 3D for Flex 3.0发布

随着Stage3D技术的推广&#xff0c;为了进一步提升TWaver 3D产品的性能和渲染效果&#xff0c;TWaver提供了全新3.0版本&#xff0c;支持Stage3D&#xff0c;并且保持绝大部分接口不变化。对于3.0之前版本的用户&#xff0c;可以与相关的TWaver技术支持人员联系获得更新接口介绍…

Spring标签库

spring提供了两个标签库文件:spring-form.tld&#xff08;表单标签库&#xff0c;用于输出HTML表单&#xff09; spring.tld&#xff08;基础标签库&#xff0c;用于Spring数据绑定等&#xff09; 使用步骤&#xff1a; 1&#xff0c;配置表单标签库&#xff0c;复制spring.tl…

JTree实现文件树

这篇文章介绍的内容其实跟TWaver的组件没有任何关系&#xff0c;但是个人觉得还是挺有意思的&#xff0c;所以发出来共享一下。这个文件树(如下图)完全基于swing的JTree组件实现&#xff0c;先看一下最后我们完成的效果&#xff1a; 运行截图&#xff1a; 功能介绍&#xff1a…

《ASP.NET1200例》在DataList里编辑和删除数据

学习内容&#xff1a;如何创建一个支持编辑和删除数据的DataList。增加编辑和删除功能需要在DataList的ItemTemplate和EditItemTemplate里增加合适的控件&#xff0c;创建对应的事件处理&#xff0c;读取用户的输入和主键值&#xff0c;然后调用BLL来实现。 使用GridView来编辑…

TWaver HTML5 继承结构和成员说明

JavaScript是一门动态语言&#xff0c;但是面向对象的特征没有Java那么明显&#xff0c;导致我们开发起来非常不习惯。拿继承来说&#xff0c;Java中有专门的extends和implements关键字实现&#xff0c;但是在JavaScript却引入了一个"别扭的"prototype&#xff0c;而…

ORCALE数据库自动备份(非数据库备份)

最近项目比较紧&#xff1b;很少写东西了。 这个是我上上个阶段写的一个自动备份的小工具&#xff1b;主要是选择性的备份数据库表结构和表里的数据。 置于工具里面的审计功能下次再介绍吧。 审计数据库结构主要是把表结构的异动都记录下来&#xff1b;如什么帐户什么时间什么I…