思远(BonaShen)博客

朋友们,我有了新了家,就在http://www.bonashen.com

FLEX- MDI窗口开发实例

参考了杜增强的dpanel和Flex Doc Team的关于Creating Resizable and Draggable Flex Components
连接:
dpanel
Creating Resizable and Draggable Flex Components
demo下载
示例:

代码:
application.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
     xmlns:mdi
="ext.containers.windows.mdi.*" width="100%" height="100%"
creationComplete
="initCollections();">
    
<mx:Script>
        
<![CDATA[
            import mx.events.MenuEvent;
            import mx.collections.XMLListCollection;
            import mx.controls.Alert;
            import mx.managers.PopUpManager;
            import mx.managers.SystemManager;
            import mx.containers.Panel;
            import ext.containers.windows.mdi.ChildWindow;
            import mx.events.FlexEvent;
            private var menuBarXML:XMLList =
            <>
                <menuitem label = "windows">
                    <menuitem label ="create window" data="createWindow"/>
                    <menuitem label ="close window" data="closeWindow"/>
                    <menuitem label ="max window" data ="maxWindow"/>
                    <menuitem label ="min window" data = "minWindow"/>
                    <menuitem label ="min all windows" data ="minAllWindows"/> 
                    <menuitem label ="Tile window" data ="tileWindow"/>
                    <menuitem label ="Cascade window" data ="cascadeWindow"/>
                </menuitem>
                <menuitem label ="modal window">
                    <menuitem label ="create modal window" data ="showModal"/>
                </menuitem>
            </>;        
            [Bindable]
            private var menuBarCollection:XMLListCollection;
            
            private function initCollections():void
            {
                menuBarCollection = new XMLListCollection(menuBarXML);
            }
            private function menuHandler(e:MenuEvent):void{
                //Alert.show(e.item.@data);
                switch(String(e.item.@data)){
                    case "createWindow":
                        new MDITest1().addToMainArea();
                        break;
                    case "showModal":
                        (new ModalWindow()).showModal();
                        break;
                    case "closeWindow":
                        ma.windowClose();
                        break;
                    case "maxWindow":
                        ma.maxActiveWindow();
                        break;
                    case "minWindow":
                        ma.minActiveWindow();
                        break;
                    case "minAllWindows":
                        ma.windowMinimizeAll();
                        break;
                    case "tileWindow":
                        ma.windowTileHorizontal();
                        break;
                    case "cascadeWindow":
                        ma.windowCascade();
                        break;
                }
            }
        
]]>
    
</mx:Script>
    
<mx:MenuBar x="0" y="0" labelField="@label" itemClick="menuHandler(event);"
dataProvider
="{menuBarCollection}" width="100%" />
    
<mdi:MainArea id="ma" width="100%" height="100%"/>
</mx:Application>

MDITest1.mxml
1 <?xml version="1.0" encoding="utf-8"?>
2 <ChildWindow xmlns="ext.containers.windows.mdi.*" xmlns:mx="http://www.adobe.com/2006/mxml"
width
="400" height="300" xmlns:flexlib="flexlib.containers.*" title="child window">
3     <flexlib:Docker>
4         <flexlib:DockableToolBar width="215">
5         <mx:Button width="30" label="B" fontWeight="bold" fontFamily="Arial"/>
6         <mx:Button width="32" label="I" fontStyle="italic"/>
7         </flexlib:DockableToolBar>
8     </flexlib:Docker>
9 </ChildWindow>


ModalWindow.mxml
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <Window xmlns="ext.containers.windows.*" 
 3     xmlns:mx="http://www.adobe.com/2006/mxml" width="412" height="322" 
 4     layout="absolute" xmlns:flexlib="flexlib.containers.*" 
 5     title="This is a modal window" >
 6     <mx:Script>
 7         <![CDATA[
 8             import mx.controls.Alert;
 9         ]]>
10     </mx:Script>
11     <mx:Button label="close" x="331" y="246" click="modalResult = Alert.CANCEL;"/>
12     <flexlib:SuperTabNavigator x="10" y="10" width="376" height="221" tabEnabled="true">
13         <mx:Canvas label="one" width="100%" height="100%">
14             <mx:DataGrid x="5" y="0" width="100%" height="100%">
15                 <mx:columns>
16                     <mx:DataGridColumn headerText="Column 1" dataField="col1"/>
17                     <mx:DataGridColumn headerText="Column 2" dataField="col2"/>
18                     <mx:DataGridColumn headerText="Column 3" dataField="col3"/>
19                 </mx:columns>
20             </mx:DataGrid>
21         </mx:Canvas>
22         <mx:Canvas label="two" width="100%" height="100%">
23         </mx:Canvas>
24         <mx:Canvas label="three" width="100%" height="100%">
25         </mx:Canvas>
26         <mx:Canvas label="four" width="100%" height="100%">
27         </mx:Canvas>
28     </flexlib:SuperTabNavigator>
29     <mx:Button label="ok" x="288" y="246" click="modalResult = Alert.OK"/>
30 </Window>
31 
ModalWindow.mxml中第11行中 click事件中只要对modalResult写值就自动关闭窗口,模仿delphi中的模态窗口。


posted on 2007-09-07 21:13 Bona shen 阅读(11919) 评论(12) 编辑 收藏

Feedback

#1楼 2007-09-22 11:31 mouse_vip[未注册用户]

请问你这个ChildWindow和ModalWindow是什么组件?是一个自定义的组件吗?是怎么实现的?我想学习一下,请联系我一下好吗?QQ:9636335  回复 引用   

#2楼 2007-10-15 15:53 阿亮[未注册用户]

请问此类ext.containers.windows.*在那里呢?  回复 引用   

#3楼 2007-10-16 21:48 阿亮[未注册用户]

能否把所有的源代码提供出来呢?按上面的源代码无法运行成功的  回复 引用   

#4楼[楼主] 2007-10-19 15:03 Bona shen      

原代码下载http://www.cnblogs.com/jssy/archive/2007/09/28/908723.html  回复 引用 查看   

#5楼[楼主] 2007-10-19 15:04 Bona shen      

--引用--------------------------------------------------
阿亮: 请问此类ext.containers.windows.*在那里呢?
--------------------------------------------------------
在syWindows.swc包中,该包的源代码下载地址是http://www.cnblogs.com/jssy/archive/2007/09/28/908723.html
 回复 引用 查看   

#6楼 2008-03-20 18:44 thorsten[未注册用户]

hey bona.. i cannot understand chinese but your code.. :)

where i can get this api?:

ext.containers.windows.mdi.*

can you answer in english to my email??

thanks and greetz from germany.. thorsten
 回复 引用   

#7楼 2008-03-20 18:55 thorsten[未注册用户]

ok.. i found it under

http://code.google.com/p/flexmdi/downloads/list

have i nice day! ............
 回复 引用   

#8楼 2008-06-02 14:11 liceven[未注册用户]

我发现有一个不知道算不算Bug
当你create a window
再吧window里面可以拖动的b/i组件移动
然后在关闭child window
可以看到那个移动的b/i组件还在那里。没有随着child window的关闭而关闭。
写的太好了,谢谢
 回复 引用   

#9楼 2008-06-04 23:04 一路风尘[未注册用户]

你好,我在配置你写的文件的时候,发现加载的xmlns:flexmdi="flexmdi.containers.*"
不支持</flexlib:SuperTabNavigator>
</flexlib:Docker>
等控件。这是为什么啊。
错误信息:
Could not resolve <flexmdi:Docker> to a component implementation.
谢谢.可以的话,email回复我。谢谢
 回复 引用   

#10楼 2008-07-07 11:17 无私奉献[未注册用户]

共享就全部共享,flexlib自定义组件为什么还揣着......
小气!
 回复 引用   

#11楼 2009-02-10 14:16 趣味无穷[未注册用户]

flexlib自定义组件 下载地址
http://code.google.com/p/flexlib/downloads/list
 回复 引用   

#12楼 2011-01-08 22:48 rongsoft      

怎么我不能运行呢?
谢谢
 回复 引用 查看