`
hjy2099
  • 浏览: 262749 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Alert,TitleWindow以及PopUp的简单分析

    博客分类:
  • Flex
阅读更多

这两天为了Fluorida的closePopUp功能,读了点Flex框架的源码,对Alert,TitleWindow以及Flex的PopUp功能做了简单的分析。
【Alert和PopUp】
Alert内部其实是调用了PopUpManager.在parent参数为null或者为Application的时候,弹出的窗口将跟当前Application在一个容器下。Alert在最顶层,Application在最底层,中间那层是一个称之为modalWindows的控件,其实就是Alert后面那个磨砂的层。为了点到Alert上的按钮,写了一个小程序分析Alert的结构,不是很好读,但是可以运行一下,看看分析出的Alert的内部结构:(大略说一下,Alert的Child有一个AlertForm,而AlertForm的Child除了第一个是TextField以外,都是按钮)

<!----><?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal">
    
<mx:Script>
        
<![CDATA[
            import mx.core.IChildList;
            import mx.core.UIComponent;
            import mx.core.IFlexDisplayObject;
            import mx.managers.ISystemManager;
            import mx.managers.PopUpManagerChildList;
            import mx.managers.PopUpManager;
            import mx.controls.Alert;
            import mx.events.CloseEvent;
            import mx.core.Singleton;
            import mx.managers.IPopUpManager;
            
            private function showSimpleAlert():void{
                Alert.okLabel="oKey";
                Alert.show("Hello, World!","",15,null,alertCloseHandle);
                var myTimer:Timer = new Timer(1000, 1);
                   myTimer.addEventListener("timer", timerHandler);
                   myTimer.start();            
            }
            
            private function alertCloseHandle(event:CloseEvent):void{
                simpleAlertShower.label = event.detail.toString();
            }
            
            private function timerHandler(event:TimerEvent):void{
                var text:String = "elements:";
                var sm:ISystemManager = (Application.application.root as ISystemManager);
                text+=sm.numChildren.toString();
                text+=";\n modalWindows:";
                text+=sm.numModalWindows.toString();
                for(var index:int = 0; index < sm.numChildren; index++)
                {
                    text += "\n" + index + " : ";
                    text += sm.getChildAt(index).toString(); 
                }
                
                var alert:Alert = sm.getChildAt(sm.numChildren - 1) as Alert;
                text += "\n buttonFlags : "+alert.buttonFlags;
                text += "\n alertChildren:" + alert.numChildren;
                for(var index:int = 0; index < alert.numChildren; index++)
                {
                    text +="\n" + alert.getChildAt(index).toString();
                }
                var alertForm:UIComponent = alert.getChildAt(0) as UIComponent;
                text += "\n alertFormChildren:" + alertForm.numChildren;
                
                for(var index:int = 0; index < alertForm.numChildren; index++)
                {
                    text +="\n"+index+":"+ alertForm.getChildAt(index).toString();
                    
                }
                popupChildText.text = text;
                alertForm.getChildAt(1).dispatchEvent(new MouseEvent(MouseEvent.CLICK));
//                var popupContainer:IChildList = (application.root as IChildList);
//                PopUpManager.removePopUp(popupContainer.getChildAt( popupContainer.numChildren - 1 ) as IFlexDisplayObject);

            }
        
]]>
    
</mx:Script>    
      
<mx:Button id="simpleAlertShower" click="showSimpleAlert();" label="Click Me"/>
      
<mx:Text id="popupChildText"/>
    
</mx:Application>

【关于TitleWindow】
TitleWindow作为弹出窗口的时候,跟Alert处的位置没什么区别,我想说的是TitleWindow的closeButton在哪里。下面这个同样不好读的程序可以帮助你分析TitleWindow或者说Panel里面都有用什么,以及closeButton在哪,其实就是在rawChildren的最后一个。

<!----><?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal">
    
<mx:Script>
        
<![CDATA[
            import mx.containers.TitleWindow;
            import mx.core.IChildList;
            import mx.core.UIComponent;
            import mx.core.IFlexDisplayObject;
            import mx.managers.ISystemManager;
            import mx.managers.PopUpManagerChildList;
            import mx.managers.PopUpManager;
            import mx.controls.Alert;
            import mx.events.CloseEvent;
            import mx.core.Singleton;
            import mx.managers.IPopUpManager;
            
            private function showSimpleAlert():void{
                var popUpWindow:TitleWindow = TitleWindow(PopUpManager.createPopUp(this,TitleWindow,true));
                popUpWindow.width = 400;
                popUpWindow.height = 300;
                popUpWindow.visible = true;
                popUpWindow.showCloseButton = true;
                var myTimer:Timer = new Timer(2000, 1);
                   myTimer.addEventListener("timer", timerHandler);
                   myTimer.start();    
            }
            
            private function alertCloseHandle(event:CloseEvent):void{
                simpleAlertShower.label = event.detail.toString();
            }
            
            private function timerHandler(event:TimerEvent):void{
                var text:String = "elements:";
                var sm:ISystemManager = (Application.application.root as ISystemManager);
                text+=sm.numChildren.toString();
                text+=";\n modalWindows:";
                text+=sm.numModalWindows.toString();
                text+="\n top children: ";
                for(var index:int = 0; index < sm.numChildren; index++)
                {
                    text += "\n" + index + " : ";
                    text += sm.getChildAt(index).toString(); 
                }
                
                var titleWindow:TitleWindow = sm.getChildAt(sm.numChildren - 1) as TitleWindow;
                text += "\n popUpWindowrawChildren:" + titleWindow.rawChildren.numChildren;
                for(var index:int = 0; index < titleWindow.rawChildren.numChildren; index++)
                {
                    text +="\n" + titleWindow.rawChildren.getChildAt(index).toString();
                }
                var titleBar:UIComponent = (titleWindow.rawChildren.getChildAt(2) as UIComponent);
                text += " has " + titleBar.numChildren;
                text += "\n" + titleBar.getChildAt(3).toString();
                
                popupChildText.text = text;
//                var popupContainer:IChildList = (application.root as IChildList);
//                PopUpManager.removePopUp(popupContainer.getChildAt( popupContainer.numChildren - 1 ) as IFlexDisplayObject);
                PopUpManager.removePopUp(titleWindow);
            }
        
]]>
    
</mx:Script>    
      
<mx:Button id="simpleAlertShower" click="showSimpleAlert();" label="Click Me"/>
      
<mx:Text id="popupChildText"/>
    
</mx:Application>
分享到:
评论

相关推荐

    flex4.6 可以拉伸的TitleWindow

    flex4.6 可以拉伸的TitleWindow。自由缩放。

    titlewindow添加更多按钮

    flex中为titlewindow添加更多按钮,使其显示在标题栏右方

    flex TitleWindow之间数据传输

    本文将深入解析如何利用TitleWindow组件进行数据传输,包括从主应用向弹出窗口传递数据以及反之亦然的过程。通过实际代码示例,我们将逐步探索这一机制的工作原理。 #### 主应用向TitleWindow传递数据 首先,我们...

    带最小化、最大化、关闭按钮的titlewindow

    在IT行业中,TitleWindow是一种常见的用户界面组件,尤其在富客户端应用或Web应用程序...在实际开发过程中,还需要考虑到不同平台和浏览器的兼容性,以及性能优化,以确保自定义TitleWindow在各种环境中都能稳定运行。

    可以自由改变大小的TitleWindow 的学习项目

    可以自由改变大小的TitleWindow 的学习项目

    Flex带最大化最小化的TitleWindow

    TitleWindow是Flex中的一种容器类,它类似于操作系统中的窗口,通常包含一个标题栏,可以显示标题,并提供一些基本操作,如关闭、最小化、最大化和还原。在本例中,我们讨论的是一个自定义的TitleWindow组件,它增加...

    flex TitleWindow自定义最大最小化

    总的来说,自定义Flex TitleWindow的最大最小化功能需要对Flex组件、事件处理以及布局管理有深入的理解。通过监听和响应用户交互,我们可以实现更符合项目需求的窗口操作功能。在实际开发中,应确保代码的可维护性和...

    TitleWindow的一个小demo

    在“TitleWindow的一个小demo”中,我们将探讨如何利用TitleWindow来实现一个简单的功能:通过按钮控制文本的隐藏与显示。 在Flex编程中,`TitleWindow`继承自`MX:Window`类,提供了更多的装饰性功能,如标题栏、...

    Flex中支持缩放的TitleWindow

    在Flex开发中,TitleWindow是一种常用的组件,它用于创建具有标题栏和可选边框的弹出窗口。这篇博客文章“Flex中支持缩放的TitleWindow”可能详细讲解了如何在Flex应用程序中实现TitleWindow组件的缩放功能,这对于...

    Flex TitleWindow父子页面的事件派发

    本文将深入探讨如何在Flex的TitleWindow父子页面之间进行有效的事件派发,以及背后的事件机制,这对于理解和优化Flex应用中的交互逻辑至关重要。 ### 1. Flex TitleWindow与事件派发基础 TitleWindow作为Flex中的...

    flex TitleWindow 放大、缩小、可缩放 弹出窗口

    Flex是Adobe开发的一种开源框架,主要用于构建...通过监听和处理鼠标事件,以及可能使用动画库,你可以为用户提供一个交互性更强的弹出窗口体验。记得在实际项目中测试这些功能,以确保它们在不同场景下都能正常工作。

    flex4自适应高度的TitleWindow

    这是一个flex4的项目,可以下载下来单独运行,项目中是一个自定义的TitleWindow,TitleWindow中存放了一个dataGrid,它可以根据dataGrid中数据行增加而改变自身高度,直至要最大高度。此组件使用mxml定义,重写了...

    Flex-TitleWindow的弹出窗口中播放一段影像.zip

    在Flex中,TitleWindow可以自定义内容,包括文本、图像以及视频等多媒体元素。 本文将详细讲解如何在Flex的TitleWindow弹出窗口中播放一段影像,以实现丰富的媒体体验。 首先,我们需要创建一个TitleWindow组件。...

    Flex带最大化最小化按钮可拖动调整窗口大小的TitleWindow

    在Flex开发中,TitleWindow是一种常用的组件,它用于创建具有...这个TitleWindow的实现涉及ActionScript 3编程,事件监听,以及对Flex容器特性的深入理解。通过这样的定制,开发者可以为用户提供更加友好的交互体验。

    实现最大化、最小化、缩放功能的TitleWindow

    一个实现最大化、最小化、缩放功能的TitleWindow,是参照其他大虾的代码,然后自己写的一个TitleWindow,并且限制了TitleWindow的拖动区域。里面提供了一个MyTitleWindow.as和一个使用MyTitleWindow的.mxml的文件...

    自定义缩放titlewindow

    前段时间在做flex的一个文档在线浏览时用到了需要TitleWindow的缩放以及最大化、最小化功能,于是自己就查看资料和参考各位大虾的代码,自己实现了下

    可最大化、最小化和关闭的TitleWindow

    TitleWindow在Adobe Flex中是一种常见的用户界面组件,它通常用于创建具有标题栏的自定义窗口。在本场景中,我们讨论的是一个特定的TitleWindow实现,它具备了最大化、最小化和关闭的功能,这对于开发者来说是非常...

    ResizableTitleWindow 可拖拽和改变大小的titlewindow

    通过阅读和分析这些文件,可以学习到具体的实现细节,这对于任何希望在自己的应用程序中实现类似功能的开发者来说都是宝贵的资源。开发者可以通过查看这些代码来理解如何在实际项目中整合和扩展这些功能,从而提升...

    Flex特效_可拖动弹出窗口布局容器TitleWindow.zip )

    Flex特效_可拖动弹出窗口布局容器TitleWindow.zip )

    FLEX TitleWindow之间数据传输的示例

    在实际的应用开发中,可能会涉及到更复杂的逻辑,例如需要处理异步数据交互、事件监听以及数据更新同步等问题。在处理这些情况时,开发者可能需要利用事件机制、数据绑定技术或者自定义事件来实现更高级的数据交互...

Global site tag (gtag.js) - Google Analytics