如何让Flex的Tree显示水平滚动条

news/2024/5/18 23:24:13 标签: tree, flex, function, application, import, encoding
论坛一直有人问为何设置了twaver.controls.Tree的horizontalScrollPolicy为 ScrollPolicy.AUTO,可是还是没有横向滚动条。这是由于Adobe出于性能的考虑,没有计算maxHorizontalScrollPosition的值。本文贴出了解决方案,效果如下:

从原始Tree继承出新的类AutoSizeTree:

package {
	import flash.events.Event;

	import mx.core.ScrollPolicy;
	import mx.core.mx_internal;

	import twaver.DataBox;
	import twaver.controls.Tree;

	public class AutoSizeTree extends Tree {
		public function AutoSizeTree(dataBox:DataBox=null) {
			super(dataBox);
			horizontalScrollPolicy = ScrollPolicy.AUTO;
		}

		override public function get maxHorizontalScrollPosition():Number {
			if (isNaN(mx_internal::_maxHorizontalScrollPosition))
				return 0;

			return mx_internal::_maxHorizontalScrollPosition;
		}

		override public function set maxHorizontalScrollPosition(value:Number):void {
			mx_internal::_maxHorizontalScrollPosition = value;
			dispatchEvent(new Event("maxHorizontalScrollPositionChanged"));

			scrollAreaChanged = true;
			invalidateDisplayList();
		}

		override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
			var diffWidth:Number = measureWidthOfItems(0,0) - (unscaledWidth - viewMetrics.left - viewMetrics.right);

			if (diffWidth <= 0)
				maxHorizontalScrollPosition = NaN;
			else
				maxHorizontalScrollPosition = diffWidth;

			super.updateDisplayList(unscaledWidth, unscaledHeight);
		}
	}
}

测试代码如下:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
				xmlns:tw="http://www.servasoftware.com/2009/twaver/flex"
				applicationComplete="init()" xmlns:local="*">
	<mx:Script>
		<![CDATA[
			import twaver.*;

			private function init():void {
				var box:ElementBox = new ElementBox();

				var group:Group = new Group();
				group.name = "Group";
				box.add(group);

				for(var i:int=0; i<20; i++){
					var node:Node = new Node();
					node.name = "Node with long long long long long long name " + Utils.randomInt(10000000);
					group.addChild(node);
					box.add(node);
				}

				tree.dataBox = box;
				tree.callLater2(function():void {
					tree.expandAll();
				});
			}
		]]>
	</mx:Script>
	<local:AutoSizeTree id="tree" width="300" height="100%"/>
</mx:Application>

如果您数据量少,性能不是大问题,不妨试一试,完整工程代码见附件:TestAutoSizeTree




treeSkill">

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

相关文章

Flex中定制带图标的Tooltip

“定制”无疑是TWaver中最大的一特色&#xff0c;无论是node&#xff0c;link&#xff0c;attachment&#xff0c;就连tooltip也同样可以定制&#xff0c;“定制”可以显示出更强更复杂的一些功能&#xff0c;今天给大家带来了一个定制Tooltip的例子。啥也不多说&#xff0c;先…

TWaver在电力系统中的应用

原文出处:http://twaver.servasoft.com/?p3945 TWaver作为一款专业的图形界面控件&#xff0c;可以应用在各行各业中。本文我们就来详细介绍一下TWaver如何绘制出电力系统的界面。我们现在看看几张电力系统的图&#xff1a; 某变电站设备接线图一 某变电所的接线图二 当然这…

Make an TWaver HTML5 iPhone App

构建iOS App有很多技术方式可以选择&#xff0c;本文介绍基于UIWebView的Cocoa Touch组件嵌入HTML页面的方式实现的一个iPhone App例子。文中将穿插iOS的基本内容&#xff0c;TWaver HTML5的基础应用&#xff0c;以及Objective C与Javascript相互调用的技术点。 首先通过XCode构…

jQuery学习笔记(简介,选择器)

jQuery优势 1. 强大的选择器。jQuery允许开发者使用从CSS1到CSS3几乎所有的选择器&#xff0c;以及jQuery独创的高级而复杂的选择器。 2. 出色的DOM操作封装 3. 可靠的事件处理机制 4. 完善的Ajax。jQuery将所有的Ajax操作封装到一个函数$.Ajax()里&#xff0c;使得开发者处理A…

Android如何显示音标

Android如何显示音标 比如&#xff1a;http://www.iciba.com/imperious/&#xff0c;那么音标是&#xff1a; [ɪmˈpɪəri:əs] 怎么显示它&#xff0c;这是个问题。 下面图是不正确的显示音标&#xff08;左&#xff09;和正确显示的截图&#xff1a; 下面说说如何解决的。 …

TWaver 3D 编辑器的使用(一)----设计3D场景以及数据绑定

TWaver提供了一套3D场景的开发包&#xff0c;用来帮助用户快速搭建3D场景&#xff0c;实现3D的监控系统。这个开发包目前商推的只有Flex框架下的版本&#xff0c;被称为TWaver3D for Flex。开发包提供简单的API&#xff0c;用户向TWaver的数据对象&#xff08;例如Node&#xf…

基于Visual C++2013拆解世界五百强面试题--题4-double转换成字符串

请用C语言实现将double类型数据转换成字符串&#xff0c;再转换成double类型的数据、int类型的数据想要完成题目中的功能&#xff0c;首先我们的先对系统存储double的格式有所了解。浮点数编码转换使用的是IEEE的编码标准。类型存储位数​​​偏置值​​数符(S)阶码(E)尾数(M)总…

Closed Fences USACO 3.4(阵亡)

描述 一个闭合的栅栏是平面上的一些不相交的首尾相连的线段形成的多边形&#xff0c;有N个角(顶点) (3 < N < 200)。 顶点不重合&#xff0c;它以逆时针方式以数组{xi, yi}给出(i1,2,...,N)。 每一对相邻的顶点都是一条栅栏。因此共有N条栅栏 (定义xN1x1, yN1y1)。 这里有…