flex 和 flexlib类库 实现 菜单和 TabNavigator

简介: 看到 extjs 的 TabNavigator和漂亮. 很实用.   对于一个后台管理程序来说 可以同时操作多个 任务.   如果用 flex 做一个后台管理程序 是否可以实现同样的功能呢.   答案是是的.并且已经 测试成功. 功能一样. 代码更简单.   其实并不复杂 .   上网络上面搜索下了..找到了一篇关于 flexlib的 文章可以实现 带关闭 按钮 的

看到 extjs 的 TabNavigator和漂亮. 很实用.

 

对于一个后台管理程序来说 可以同时操作多个 任务.

 

如果用 flex 做一个后台管理程序 是否可以实现同样的功能呢.

 

答案是是的.并且已经 测试成功. 功能一样. 代码更简单.

 

其实并不复杂 .

 

上网络上面搜索下了..找到了一篇关于 flexlib的 文章可以实现 带关闭 按钮 的 TabNavigator

 

http://code.google.com/p/flexlib/

 

如果要找看更详细的参数.看官方文档还是最好的.比搜索要全面.

 

菜单借用 了 flex explore 的代码.

 

下载 swc 文件放到工程 的 libs 下面,添加到 path 里面.

 

添加xmlns

 

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
	xmlns:flexlib="http://code.google.com/p/flexlib/"
	xmlns:explorer="*" 
   
 

进行代码编写.

 

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
	xmlns:flexlib="http://code.google.com/p/flexlib/"
	xmlns:explorer="*" 
    width="100%" height="100%" pageTitle="我的系统测试." 
    initialize="sdk.send();" fontSize="12">

    <mx:Script>
        <![CDATA[
        	import mx.controls.SWFLoader;
        	import mx.containers.VBox;
        	import mx.controls.Label;
	        import flexlib.controls.SuperTabBar;
			import flexlib.events.TabReorderEvent;
			import flexlib.controls.tabBarClasses.SuperTab;
			
			[Embed(source="./assets/document.png")]
			private var document_icon:Class;//tab左面的图标.
			
	        private function treeChanged(event:Event):void
	        {//响应树点击的双击事件.
	            var nodeApp:String = compLibTree.selectedItem.@app;
	            var nodeLabel:String = compLibTree.selectedItem.@label;
	            //app是xml里面的定义的一个属性.
	            if (nodeApp != null && nodeApp != "")
	            {//如果有app这个属性.说明这个是一个叶子节点.开始加载那个flex文件.
	                addTab(nodeLabel, contentId, nodeApp);
	                //打开选项卡.带关闭按钮的选项卡.
	            }else{//如果里面没有app这个字段.说明这个是个文件夹.
	                compLibTree.expandItem(compLibTree.selectedItem, true, true);
	                //展开文件夹显示下面的内容.
	            }
	        }
	        
	        private function addTab(myLabel:String, navigator:SuperTabNavigator,nodeApp:String):void {
	        		var swfLoader:SWFLoader = new SWFLoader();
	        		//动态加载flex类.在这里进行定义.每一个table新建立一个实例.
					var curNum:Number = contentId.numChildren + 1;
					var child:VBox = new VBox();
					child.setStyle("closable", true);
					//设置选项卡可以关闭.
					child.label = myLabel;
					//设置选项卡的名称.
					child.icon = document_icon;
					//设置选项卡的左面的文档图标.
					swfLoader.source = nodeApp + ".swf";
					//开始动态加载swf文件.
					child.addChild(swfLoader);
					navigator.addChild(child);
					//将加载后的swf类放到child里面,再放到navigator里面.
					contentId.selectedIndex = contentId.numChildren - 1;
			}
	
	        private function sdkLoaded():void
	        {
	            explorerTree = XML(sdk.lastResult.node);
	            compLibTree.dataProvider = explorerTree;
	        }
        ]]>
    </mx:Script>


    <mx:HTTPService id="sdk" url="explorer.xml" resultFormat="e4x" result="sdkLoaded();"/>
    <mx:XML id="explorerTree"/>

    <mx:HDividedBox width="100%" height="100%">
        <mx:Panel width="30%" height="100%" title="测试菜单">
            <mx:Tree id="compLibTree" width="100%" height="100%" showRoot="false" labelField="@label"
            change="treeChanged(event);"/>
        </mx:Panel>
        
		<flexlib:SuperTabNavigator id="contentId" scrollSpeed="25" dropShadowEnabled="false"
			width="100%" height="100%" horizontalGap="0"
			closePolicy="{SuperTab.CLOSE_ALWAYS}" dragEnabled="false" dropEnabled="false"
			tabWidth="160"
		/>
		
    </mx:HDividedBox>
</mx:Application>
 

 

<flexlib:SuperTabNavigator id="contentId" scrollSpeed="25" dropShadowEnabled="false"
			width="100%" height="100%" horizontalGap="0"
			closePolicy="{SuperTab.CLOSE_ALWAYS}" dragEnabled="false" dropEnabled="false"
			tabWidth="160"
		/>

 这个就是这个 带关闭按钮的组件.

 

closePolicy="{SuperTab.CLOSE_ALWAYS}"

总是显示关闭按钮.

 

dragEnabled="false" dropEnabled="false"
禁用拖拽.用处好像不大去掉了.

 

 


现在还有一点小问题.

 

1.打开的swf 对象.不可以全部充满  TabNavigator参数怎么配置不太好找.

2.总是新打开一个..没有对已经打开的  TabNavigator  进行切换.

   这似乎.弄一个 map的进行匹配判断下就可以了.

 

很是高兴呢..做出的东西竟可以如此简单.

唯一不好的地方是 文件太大了..在网络条件不好的情况访问会有很大问题.

啥还没有写呢 文件就已经变成 1.5MB了.

 

 

  • 大小: 12.1 KB
目录
相关文章
|
3月前
|
Python 容器
pyqt5-布局管理入门-信号和槽关联-菜单与工具栏-打包资源文件
pyqt5-布局管理入门-信号和槽关联-菜单与工具栏-打包资源文件
20 0
|
6月前
|
前端开发 Windows
19EasyUI 布局- 创建 XP 风格左侧面板
19EasyUI 布局- 创建 XP 风格左侧面板
24 0
|
C++ Windows
Qt-QML-Popup,弹层界面编写
随着接触Qt的时间的增加,也逐渐的发现了Qt 的一些不人信话的一些地方,不由的想起一句话,也不知道是在哪里看到的了“一切变成语言都是垃圾,就C++还可以凑合用”大致意思是这样。最近项目的祝界面框架都基本写完了,那自我感觉良好,感觉自己QML的不得了了,全部用的都是自己YY出来的空间,今天小伙伴在同伴代码后,用到了我的模块,给我说了一个BUG,
471 0
Qt-QML-Popup,弹层界面编写
|
程序员 开发工具 C语言
Qt编写自定义控件67-通用无边框
一、前言 在之前的一篇文章中写过一个通用的移动控件,作用就是用来传入任意的widget控件,可以在父类容器中自由移动。本篇文章要写的是一个通用的无边框类,确切的说这不叫控件应该叫组件才对,控件是要看得见的东西,有绘制需求的,而这个需要依附在控件上。
904 0
|
程序员 C语言
Qt编写自定义控件48-面板窗体控件
一、前言 很多时候需要有一个控件,能够替代容器控件,自动容纳多个widget,自适应宽高,然后提供滚动条功能,这就必然需要用到QScrollArea控件,可设置各个子面板的间距等,也在很多系统中用到,比如温湿度设备面板,有几百个温湿度设备,需要一个容器放置,自动产生滚动条,可以设置面板的固定宽高或者自适应拉伸,其实就是放了表格布局+弹簧来设置。
1230 0
|
程序员 开发工具 C语言
Qt编写自定义控件47-面板区域控件
一、前言 在很多web网页上,经常可以看到一个设备对应一个面板,或者某种同等类型的信息全部放在一个面板上,该面板还可以拖来拖去的,这个控件首次用在智能访客管理平台中,比如身份证信息一个面板,访客信息一个面板,被访人信息一个面板,这样相当于分类展示了,还提供了对应的标题栏有文字显示,这个控件的使用场景也是非常多,还有个子标题可以设置,拓展了报警闪烁的接口。
1195 0
|
开发工具 C语言
Qt编写自定义控件39-导航标签
一、前言 在很多菜单导航界面中,当单击了二级菜单或者三级菜单以后,顶部会显示带箭头或者其他标识的导航标签,可以单击该标签快速切换到对应的界面,也作为指示当前处于哪一级菜单下的界面,主要在WEB中大肆流行,在CS架构的项目中也逐渐应用开来,发现现在越来越多的CS开发的程序,都学习和模仿并应用BS架构的程序中好的方面,尤其是UI方面,取长补短,挺好,专业UI设计师的美感比绝大多数程序员的美感要好很多,他们设计出来的效果都是非常棒的,我个人喜欢去UI中国参看学习各种各样的UI设计,看到好的会下载下来,直接搞个拾色器查看颜色,看下人家的颜色配色搭配的多好。
917 0
|
开发工具 C语言
Qt编写自定义控件9-导航按钮控件
一、前言 导航按钮控件,主要用于各种漂亮精美的导航条,我们经常在web中看到导航条都非常精美,都是html+css+js实现的,还自带动画过度效果,Qt提供的qss其实也是无敌的,支持基本上所有的CSS2属性,配合QPainter这个无敌大法工具,没有什么不能绘制的。
1223 0
TabControl 伸缩式菜单 仿照 uwp SplitView
原文:TabControl 伸缩式菜单 仿照 uwp SplitView 留下备用笔记 之前用的Frame+Page的切换content,但是发现页面content内容控件多的时候,每一次切换都有点卡,点击了半天才反应过来(每次切换都要重新加载控件,具体怎么解决不知道.
785 0
|
Java
Java中GUI的默认窗体布局 和 常见的窗体布局方案
Java中GUI的默认窗体布局  常见的窗体布局方案 我的GitHub地址:https://github.com/heizemingjun 我的博客园地址:http://www.cnblogs.
1262 0