`
pizazz_ex
  • 浏览: 20153 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

可以简易管理的弹出组件

 
阅读更多
实现了一个简易的弹出管理器,可以设置是否弹出唯一面板,可以配合其它操作更改面板状态,弹出面板按照一定方式排序
组件代码:
package pizazz.flex4.manager.components.popup{
	import spark.components.TitleWindow;

	public class PopUpItem{
		private var _sign:String = "";
		private var _window:TitleWindow = null;
		private var _state:String = "";
		private var _index:Number = -1;

		public function get sign():String{
			return _sign;
		}

		public function get window():TitleWindow{
			return _window;
		}

		public function set state(value:String):void{
			_state = value;
		}

		public function get state():String{
			return _state;
		}

		public function set index(value:Number):void{
			_index = value;
		}

		public function get index():Number{
			return _index;
		}

		public function PopUpItem(window:TitleWindow, sign:String = ""){
			_window = window;
			_sign = sign;
		}
	}
}

package pizazz.flex4.manager{
	import mx.collections.ArrayCollection;
	import mx.core.UIComponent;
	import mx.events.CollectionEvent;
	import mx.managers.PopUpManager;
	import pizazz.flex4.manager.components.popup.PopUpItem;
	import spark.components.TitleWindow;

	public class PopUp{
		private var _num:int = 0;
		private const _left:uint = 32;
		private const _top:uint = 24;
		protected const _unique:Object = {};;
		protected const _collection:ArrayCollection = new ArrayCollection();
		private static var _popup:PopUp;
		protected static var _lock:Boolean = false;
		protected static var _container:UIComponent;
		/**
		 * 获取弹出数量(建议使用方法PopUp.getInstance().lenght)
		 */ 
		public function get length():int{
			return _collection.length;
		}

		public function PopUp(){
			if(!_lock){
				_collection.addEventListener(CollectionEvent.COLLECTION_CHANGE, 
					arrange);
			}
		}

		protected function exist(sign:String):PopUpItem{
			return _unique.hasOwnProperty(sign) ? 
				_unique[sign] as PopUpItem : null;
		}

		private function arrange(event:CollectionEvent):void{
			var _length:int = event.target.length;
			var _newItem:PopUpItem = event.items[0] as PopUpItem;
			if(_length > _num){
				var _xMove:Number = 0;
				var _yMove:Number = 0;
				var _xInterval:uint = 0;
				var _yInterval:uint = 0;
				for each(var _oldItem:PopUpItem in _collection){
					_xInterval += _left;
					_yInterval += _top;
					if(_xInterval + _left * 4 > _container.width || 
						_yInterval + _top * 4 > _container.height){
						_xMove = _xInterval - _container.width + 
							_left * 16;
						_yMove = _top * 2;
					}else{
						_xMove = _xInterval;
						_yMove = _yInterval;
					}
					if(_xMove > _container.width){
						_xMove = _left;
					}
				}
				_newItem.window.x = _xMove;
				_newItem.window.y = _yMove;
			}
			_num = _length;
		}

		protected function addItem(window:TitleWindow, sign:String = ""):void{
			var _item:PopUpItem = new PopUpItem(window, sign);
			_collection.addItem(_item);
			if(sign != ""){
				_unique[sign] = _item;
			}
		}

		protected function removeItem(window:TitleWindow):void{
			var _item:PopUpItem = getItemIndex(window);
			if(_item){
				_collection.removeItemAt(_item.index);
				if(_item.sign != "" && exist(_item.sign)){
					delete _unique[_item.sign];
				}
			}
		}

		protected function updateState(window:TitleWindow, 
				state:String = ""):void{
			var _item:PopUpItem = getItemIndex(window);
			if(_item){
				_item.state = state;
			}
		}
		/**
		 * 获取PopUp实例
		 * @return PopUp实例
		 */ 
		public static function getInstance():PopUp{
			return _popup;
		}
		/**
		 * 初始化组件(只能实例化一次)
		 * @param container PopUpManager.addPopUp中parent参数
		 */ 
		public static function init(container:UIComponent):void{
			if(!_lock){
				_container = container;
				_popup = new PopUp();
				_lock = true;
			}
		}
		/**
		 * 获取面板包装对象 
		 * @param window 面板
		 * @return 包装对象
		 */
		public function getItemIndex(window:TitleWindow):PopUpItem{
			for(var i:int = 0; i < _collection.length; i ++){
				var _item:PopUpItem = _collection.getItemAt(i) as PopUpItem;
				if(_item.window == window){
					_item.index = i;
					return _item;
				}
			}
			return null;
		}
		/**
		 * 弹出面板
		 * @param window 需要弹出的面板
		 * @param mask 是否为模态窗口
		 * @param sign 面板弹出唯一标志
		 */ 
		public static function openWindow(window:TitleWindow, 
				mask:Boolean = false, sign:String = ""):Boolean {
			var _item:PopUpItem = PopUp.getInstance().exist(sign);
			if(_item && _item.window.isPopUp){
				PopUpManager.bringToFront(_item.window);
				return false;
			}
			PopUpManager.addPopUp(window, _container, mask);
			PopUp.getInstance().addItem(window, sign);
			return true;
		}
		/**
		 * 关闭面板
		 * @param window 需要关闭的面板
		 */ 
		public static function closeWindow(window:TitleWindow):void {
			PopUp.getInstance().removeItem(window);
			if(window.isPopUp){
				PopUpManager.removePopUp(window);
			}
		}
		/**
		 * 面板状态改变
		 * @param window 需要改变状态的面板
		 * @param state 面板状态
		 */
		public static function updateState(window:TitleWindow, 
			state:String = ""):void{
			PopUp.getInstance().updateState(window, state);
		}
	}
}

组件执行:
<?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" creationComplete="init()">
	<s:layout>
		<s:HorizontalLayout />
	</s:layout>
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.events.CloseEvent;
			import pizazz.flex4.manager.PopUp;
			import pizazz.flex4.manager.components.popup.PopUpItem;
			import spark.components.TitleWindow;

			private var i:int = 0;

			private function init():void{
				PopUp.init(this);
			}

			private function onClickA():void{
				PopUp.openWindow(windowFactory());
			}

			private function onClickB():void{
				PopUp.openWindow(windowFactory(), false, "unique");
			}

			private function onClickC():void{
				Alert.show("Length: " + PopUp.getInstance().length);
			}

			private function windowFactory():TitleWindow{
				const _window:TitleWindow = new TitleWindow();
				_window.width = 320 + i;
				_window.height = 240 + i;
				_window.title = "" + i++;
				_window.addElement(buttonFactory(_window));
				_window.addEventListener(CloseEvent.CLOSE,
					function(event:CloseEvent):void{
						PopUp.closeWindow(_window);
					}
				);
				return _window;
				function buttonFactory(window:TitleWindow):Button{
					const _button:Button = new Button();
					_button.label = "Info";
					_button.addEventListener(MouseEvent.CLICK,
						function(event:MouseEvent):void{
							var _item:PopUpItem = 
							PopUp.getInstance().getItemIndex(window);
							Alert.show("Index: " + _item.index + "\n" + 
								"Sign: " + _item.sign);
						}
					);
					return _button;
				}
			}
		]]>
	</fx:Script>
	<s:Button label="一般面板" width="100" click="onClickA()" />
	<s:Button label="唯一面板" width="100" click="onClickB()" />
	<s:Button label="面板数量" width="100" click="onClickC()" />
</s:Application>

视图:

  • 大小: 11.2 KB
分享到:
评论

相关推荐

    耐威网关软件防火墙简易版 1.0

    按“安装”按钮,弹出“选择网络组件类型”对话框3. 选中“服务”后按“添加按钮”,弹出“选择网络服务”对话框4. 按“从磁盘安装” 按钮,弹出“从磁盘安装”对话框5. 按“浏览”按钮,弹出“查找文件”对话框...

    java 简易 计算器 标签中加图片

    这个计算器是我学Java做的第一个计算器。感觉还是有点成就感的。里面实现了在标签组件中添加图片和点击组件弹出对话框的功能。

    Java Swing组件实现的日历程序

    实现Java日历计算,图形化界面,以及双击某个日期点即跳出日期的程序

    wxapp-components:微信小程序的组件库

    components简易的微信小程序的组件库总的效果demo和图片有时间马上搞上去,目前正在公司搬砖中,有兴趣的给个star关注下哈~~已完成calendar(日历组件)card (跳转卡片)cell (小列表)chuntdown (倒计时组件)loading ...

    JAVA简易时间 日历课程设计

    目 录 1. 题目说明…………...3)使用图形化界面能够弹出对话框; 5)正常退出程序。 2.2 设计思想 设计一个类用来构成日历系统的主窗口,然后编写一个框架类显示时间和提示信息。在设计中应用了多种容器和控件。

    asoft签到管理系统tykq3.5_build20110125

    5、增加新便签弹出、新公告弹出用户私人定制功能,任何用户可以根据自己的需要打开或者关闭该功能。 6、增加登陆开关验证码功能,现在您可以关闭“烦人”的验证码了。 7、嵌入Service Pack中心,现在您可以进行...

    具有图形界面的Java记事本程序

    一个Java程序,实现Windows记事本的功能,包括新建,打开,保存和另存为,退出,撤销,剪切,赋值,黏贴,删除,查找,替换,转到,全选,时间日期,自动换行,调整字体,状态栏,鼠标右键弹出菜单功能等

    DOS窗口 命令提示符

    mplayer2-------简易widnows media player mspaint--------画图板 mstsc----------远程桌面连接 mplayer2-------媒体播放机 magnify--------放大镜实用程序 mmc------------打开控制台 mobsync--------同步命令 ...

    YUI v3.17.2 RC1.zip

    提供简易产生鼠标移过弹出 选单的方式。 滑块 提供一般性滑块组件让用户可在有限范围内以单轴或者双轴选择值。 分页检视 提供以分页方式来检视内容。 树状检视 产生目录树,其下节点可以缩放。   CSS 资源 ...

    arcgis 10 破解文件

    在随后弹出的ArcGIS Administrator窗口中,点击左侧的Availability,右侧显示很多项目(Feature)且数量为2048(VBA除外),过期显示为permanent(永久,不过期)即表示一切正常。点击OK关闭窗口。 [C] 安装您的...

    JAVA上百实例源码以及开源项目

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...

    JAVA上百实例源码以及开源项目源代码

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...

    java开源包4

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    aui-artDialog

    功能: 支持锁定屏幕(遮罩)、模拟alert和confirm、多窗口弹出、静止定位、支持Ese键关闭对话框、定时关闭、自定义位置、拖动、鼠标调节窗口大小、换肤…… 优点 兼容主流浏览器: 支持IE6和IE6+, Firefox, chrome, ...

    java开源包1

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包11

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包2

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包3

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

    java开源包6

    它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...

Global site tag (gtag.js) - Google Analytics