实现了一个简易的弹出管理器,可以设置是否弹出唯一面板,可以配合其它操作更改面板状态,弹出面板按照一定方式排序
组件代码:
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
分享到:
相关推荐
按“安装”按钮,弹出“选择网络组件类型”对话框3. 选中“服务”后按“添加按钮”,弹出“选择网络服务”对话框4. 按“从磁盘安装” 按钮,弹出“从磁盘安装”对话框5. 按“浏览”按钮,弹出“查找文件”对话框...
这个计算器是我学Java做的第一个计算器。感觉还是有点成就感的。里面实现了在标签组件中添加图片和点击组件弹出对话框的功能。
实现Java日历计算,图形化界面,以及双击某个日期点即跳出日期的程序
components简易的微信小程序的组件库总的效果demo和图片有时间马上搞上去,目前正在公司搬砖中,有兴趣的给个star关注下哈~~已完成calendar(日历组件)card (跳转卡片)cell (小列表)chuntdown (倒计时组件)loading ...
目 录 1. 题目说明…………...3)使用图形化界面能够弹出对话框; 5)正常退出程序。 2.2 设计思想 设计一个类用来构成日历系统的主窗口,然后编写一个框架类显示时间和提示信息。在设计中应用了多种容器和控件。
5、增加新便签弹出、新公告弹出用户私人定制功能,任何用户可以根据自己的需要打开或者关闭该功能。 6、增加登陆开关验证码功能,现在您可以关闭“烦人”的验证码了。 7、嵌入Service Pack中心,现在您可以进行...
一个Java程序,实现Windows记事本的功能,包括新建,打开,保存和另存为,退出,撤销,剪切,赋值,黏贴,删除,查找,替换,转到,全选,时间日期,自动换行,调整字体,状态栏,鼠标右键弹出菜单功能等
mplayer2-------简易widnows media player mspaint--------画图板 mstsc----------远程桌面连接 mplayer2-------媒体播放机 magnify--------放大镜实用程序 mmc------------打开控制台 mobsync--------同步命令 ...
提供简易产生鼠标移过弹出 选单的方式。 滑块 提供一般性滑块组件让用户可在有限范围内以单轴或者双轴选择值。 分页检视 提供以分页方式来检视内容。 树状检视 产生目录树,其下节点可以缩放。 CSS 资源 ...
在随后弹出的ArcGIS Administrator窗口中,点击左侧的Availability,右侧显示很多项目(Feature)且数量为2048(VBA除外),过期显示为permanent(永久,不过期)即表示一切正常。点击OK关闭窗口。 [C] 安装您的...
Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...
Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...
它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...
功能: 支持锁定屏幕(遮罩)、模拟alert和confirm、多窗口弹出、静止定位、支持Ese键关闭对话框、定时关闭、自定义位置、拖动、鼠标调节窗口大小、换肤…… 优点 兼容主流浏览器: 支持IE6和IE6+, Firefox, chrome, ...
它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...
它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...
它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...
它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...
它能够在日期输入框后面弹出一个日历。 网页搜索爬虫 BlueLeech BlueLeech是一个开源程序,它从指定的URL开始,搜索所有可用的链接,以及链接之上的链接。它在搜索的同时可以下载遇到的链接所指向的所有的或预定义...