一、创建一个窗口。
1. 先自定义一个TitleWindow组件DefTitleWindow.mxml。
有个需要注意的地方是,DefTitleWindow 组件本身可以定义关闭自己的方法。
- close="titlewindow1_closeHandler(event)"
- protected function titlewindow1_closeHandler(event:CloseEvent):void
- {
- PopUpManager.removePopUp(this);
- }
关闭窗口也可以在主窗口中添加监听。
- defTitleWindow.addEventListener(CloseEvent.CLOSE, defTitleWindow_closeHandler);
- /**
- * 窗口关闭调用方法
- */
- private function defTitleWindow_closeHandler(event:CloseEvent):void {
- PopUpManager.removePopUp(defTitleWindow);
- }
但在模态模式下,弹出多个窗口后,前者可以一一关闭窗口,而后者只能关闭一个,然后监听失效。
2. 可以有两种方式弹出窗口,分别是 PopupManager 的 addPopUp() 方法和 createPopUp() 方法。
- private var defTitleWindow:DefTitleWindow;
- defTitleWindow = new DefTitleWindow();
- /**
- * 在主程序中添加一个自定义窗口
- * defTitleWindow 需弹出的目标窗口
- * this 主窗口
- * false 模态标记(true表示模态,弹出窗口后背景内容被屏蔽;false表示非模态,背景一直未屏蔽)
- */
- PopUpManager.addPopUp(defTitleWindow, this, false);
- /**
- * 在主程序中添加一个自定义窗口
- * this 主窗口
- * DefTitleWindow 需弹出的目标窗口类名
- * true 模态标记(true表示模态,弹出窗口后背景不可点;false表示非模态,背景一直可点)
- */
- defTitleWindow2 = DefTitleWindow(PopUpManager.createPopUp(this, DefTitleWindow, true));
二、窗口的拖动功能
组件都具有 isPopUp 属性来决定是否可以拖动,弹出的窗口是否需要拖动,只需要设置该属性即可,但前提是这些组件都是基于 Panel 或者 TitleWindow 的,如果是基于Canvas的组件,则该属性不起作用。要想实现拖动,必须手动监听MOUSE_DOWN 事件。
这样一来,拖动问题是解决了,但程序中往往会有很多按钮,如果都这样实现拖动,那么监听就会变得特别多,代码也很乱,所以最好的方式,还是写一个通用的拖动类,调用其自定义的拖动函数即可。