定位和布局
布局是把界面中的元素(如按钮、下拉列表等控件)按照一定的等级结构排列起来。布局的作用在于优化界面、设计更好的更加人性的操作环境。
Canvas容器、Box容器、DividedBox容器、表单布局、网格定位、Tile布局、面板、弹出窗口
一、 Canvas容器
Canvas布局容器可以看作是具有和顶部容器Application相同功能的子容器,其中可以嵌入各种Flex组件。Canvas布局容器定义了一个矩形的区域,在区域中可以放置子容器和控件。
1.1 使用Canvas容器布局
在MXML代码块中,可以使用标记<mx:Canvas>来创建Canvas容器。在Canvas容器中,使用id属性可以标识控件的唯一性,使用x和y坐标值可以很好的定位。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Canvas backgroundColor="0x4B6BE9" backgroundAlpha="0.5" borderStyle="solid" width="295" height="182" x="10" y="10"> <mx:Label text="用户名:" x="29" y="34" fontSize="14"/> <mx:Label text="密码:" x="43" y="74" fontSize="14"/> <mx:TextInput x="98" y="30" fontSize="14"/> <mx:TextInput x="98" y="70" fontSize="14" displayAsPassword="true"/> <mx:Button x="86" y="126" label="登录" fontSize="14"/> <mx:Button x="175" y="126" label="注册" fontSize="14"/> </mx:Canvas> </mx:Application>
二、使用Box布局容器
Box布局容器提供了一种横向或纵向的布局方式。默认情况下,Box布局是纵向的。通过设置属性direction的值可以改变布局的方式。
HBox和VBox布局容器是Box布局容器的一种简化形式,提供了快速的横向和纵向的布局
2.1 使用Box容器
使用标识符<mx:Box>可以创建一个Box布局容器。通过属性direction可以设置布局方式是横向的(horizontal)还是纵向的(vertical)。
<mx:Box direction="horizontal" x="24" y="27"> <mx:Label text="用户名:" fontSize="14"/> <mx:TextInput fontSize="14"/> </mx:Box>
2.2 使用HBox和VBox容器实现横向或纵向的布局
HBox和VBox布局容器就相当于Box布局容器设置属性direction之后的效果。HBox布局是横向排列子组件,而VBox是纵向的。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Box x="10" y="10" width="295" height="182" verticalAlign="middle" horizontalAlign="center" backgroundColor="0x4B6BE9" backgroundAlpha="0.5" borderStyle="solid"> <mx:HBox> <mx:VBox> <mx:Label text="用户名:" fontSize="14"/> <mx:Label text="密码:" fontSize="14"/> </mx:VBox> <mx:VBox> <mx:TextInput fontSize="14"/> <mx:TextInput fontSize="14" displayAsPassword="true"/> <mx:HBox> <mx:Button label="登录" fontSize="14"/> <mx:Button label="注册" fontSize="14"/> </mx:HBox> </mx:VBox> </mx:HBox> </mx:Box> </mx:Application>
三、 使用DividedBox容器布局
DividedBox布局容器也提供了横向或纵向排列的形式。与Box布局容器不同的是,在每一个子容器之间都放置了一个可调节的间隔条。通过鼠标单击这个间隔条,可以调节每个子容器的区域大小。
3.1 创建DividedBox容器
使用标识符<mx:DividedBox>可以创建一个DividedBox布局容器。通过属性direction可以设置布局的排列方式。默认情况下,DividedBox布局容器中的子控件是纵向排列的。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()"> <mx:Script> <![CDATA[ import mx.controls.List; import mx.events.ListEvent; import mx.events.ItemClickEvent; import mx.collections.ArrayCollection; [Bindable] // 创建数组集合 private var contactArr:ArrayCollection; // 初始化 private function initApp():void { // 填充数组集合数据 contactArr = new ArrayCollection([ {name:"小王", tel:"13695632648", corp:"***房地产开发有限公司", memo:"备注1"}, {name:"小李", tel:"13049632540", corp:"***网络技术开发有限公司", memo:"备注2"}, {name:"小朱", tel:"13366998741", corp:"***物流有限公司", memo:"备注3"}, {name:"小张", tel:"15933669955", corp:"***集成电路开发有限公司", memo:"备注4"} ]); } // DataGrid单元格单击事件 private function dgContract_itemClick(event:ListEvent):void { // 设置文本显示内容 taMemo.text = dgContract.selectedItem.memo; } ]]> </mx:Script> <mx:DividedBox x="44" y="27" width="386"> <mx:DataGrid fontSize="12" id="dgContract" dataProvider="{contactArr}" itemClick="dgContract_itemClick(event)" width="100%"> <mx:columns> <mx:DataGridColumn headerText="联系人" dataField="name"/> <mx:DataGridColumn headerText="联系方式" dataField="tel"/> <mx:DataGridColumn headerText="所属公司" dataField="corp"/> </mx:columns> </mx:DataGrid> <mx:TextArea id="taMemo" width="100%" fontSize="12"/> </mx:DividedBox> </mx:Application>
3.2 使用HDividedBox和VDividedBox容器实现可调控的布局
HDividedBox和VDividedBox布局容器提供了与DividedBox类似的布局方式。实质上,这两个布局容器是DividedBox布局容器的特殊形式,与设置了属性direction的值起到同样的效果。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()"> <mx:Script> <![CDATA[ import mx.controls.List; import mx.events.ListEvent; import mx.events.ItemClickEvent; import mx.collections.ArrayCollection; [Bindable] // 创建数组集合 private var contactArr:ArrayCollection; // 初始化 private function initApp():void { // 填充数据 contactArr = new ArrayCollection([ {name:"小王", tel:"13695632648", corp:"***房地产开发有限公司", memo:"备注1"}, {name:"小李", tel:"13049632540", corp:"***网络技术开发有限公司", memo:"备注2"}, {name:"小朱", tel:"13366998741", corp:"***物流有限公司", memo:"备注3"}, {name:"小张", tel:"15933669955", corp:"***集成电路开发有限公司", memo:"备注4"} ]); } // 单元格单击事件 private function dgContract_itemClick(event:ListEvent):void { // 设置文本内容 taMemo.text = dgContract.selectedItem.memo; } ]]> </mx:Script> <mx:HDividedBox x="16" y="36" width="643"> <mx:Form width="42%" height="100%" fontSize="12"> <mx:FormHeading label="添加记录" fontSize="16"/> <mx:FormItem label="联系人"> <mx:TextInput/> </mx:FormItem> <mx:FormItem label="联系方式"> <mx:TextInput/> </mx:FormItem> <mx:FormItem label="所属公司"> <mx:TextInput/> </mx:FormItem> <mx:FormItem label="备注"> <mx:TextInput/> </mx:FormItem> <mx:FormItem> <mx:Button label="添加"/> </mx:FormItem> </mx:Form> <mx:VDividedBox width="58%" height="100%"> <mx:DataGrid fontSize="12" id="dgContract" dataProvider="{contactArr}" itemClick="dgContract_itemClick(event)" width="100%"> <mx:columns> <mx:DataGridColumn width="50" headerText="联系人" dataField="name"/> <mx:DataGridColumn width="120" headerText="联系方式" dataField="tel"/> <mx:DataGridColumn headerText="所属公司" dataField="corp"/> </mx:columns> </mx:DataGrid> <mx:TextArea id="taMemo" width="100%" fontSize="12"/> </mx:VDividedBox> </mx:HDividedBox> </mx:Application>
四、表单布局
在Web应用程序中,表单是搜集用户信息的常用方式。表单常常被用来搜集注册、购买或其他数据信息等。
4.1 创建表单
在Flex中,支持使用Form容器来创建一个表单。通过使用FormHeading还可以设置表单的头部信息。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Form> <mx:FormHeading label="会员注册" fontSize="16"/> <mx:FormItem label="用户名:" fontSize="12"> <mx:TextInput text=""/> </mx:FormItem> <mx:FormItem label="密码:" fontSize="12"> <mx:TextInput text="" displayAsPassword="true"/> </mx:FormItem> <mx:FormItem label="确认密码:" fontSize="12"> <mx:TextInput text="" displayAsPassword="true"/> </mx:FormItem> <mx:FormItem label="联系方式:" fontSize="12"> <mx:TextInput text=""/> </mx:FormItem> <mx:FormItem> <mx:Button label="提交" fontSize="12"/> </mx:FormItem> </mx:Form> </mx:Application>
4.2 设置间隔
表单内容之间的间隔可以通过verticalGap和indicatorGap来调节。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Form labelWidth="80" verticalGap="20" indicatorGap="14"> <mx:FormHeading label="用户登录" fontSize="16"/> <mx:FormItem label="用户名:" fontSize="12"> <mx:TextInput/> </mx:FormItem> <mx:FormItem label="密码:" fontSize="12"> <mx:TextInput displayAsPassword="true"/> </mx:FormItem> <mx:FormItem> <mx:Button label="登录" fontSize="12"/> </mx:FormItem> </mx:Form> </mx:Application>
4.3 表单验证
在表单提交之前,往往需要验证表单内容的正确性。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ private function Submit_Click():void { // 处理数据 } ]]> </mx:Script> <mx:EmailValidator source="{email}" property="text"/> <mx:PhoneNumberValidator source="{tel}" property="text"/> <mx:Form> <mx:FormHeading label="购物表单" fontSize="16"/> <mx:FormItem label="收货人姓名:" fontSize="12" required="true"> <mx:TextInput text=""/> </mx:FormItem> <mx:FormItem label="电子邮件:" fontSize="12" required="true"> <mx:TextInput id="email" text=""/> </mx:FormItem> <mx:FormItem label="详细地址:" fontSize="12" required="true"> <mx:TextInput text=""/> </mx:FormItem> <mx:FormItem label="邮政编码:" fontSize="12"> <mx:TextInput id="zipCode" text=""/> </mx:FormItem> <mx:FormItem label="电话:" fontSize="12"> <mx:TextInput id="tel" text=""/> </mx:FormItem> <mx:FormItem> <mx:Button label="提交表单" fontSize="12" click="Submit_Click()"/> </mx:FormItem> </mx:Form> </mx:Application>
五、 网格定位
在Flex中提供了网格布局的支持,使得可以像HTML中表格那样布局。网格组件的使用非常类似于HTML中的Table。
5.1 使用网格定位
可以使用标记符<mx:Grid>创建网格布局容器,这个就相当于HTML表格中的<Table>标签。<mx:GridRow>表示网格中的一行,相当于<tr>标签。<mx:GridItem>表示单元格,相当于<td>标签。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Grid x="25" y="25"> <mx:GridRow> <mx:GridItem> <mx:Label text="用户名:" fontSize="12"/> </mx:GridItem> <mx:GridItem> <mx:TextInput text=""/> </mx:GridItem> </mx:GridRow> <mx:GridRow> <mx:GridItem> <mx:Label text="密码:" fontSize="12"/> </mx:GridItem> <mx:GridItem> <mx:TextInput text="" displayAsPassword="true"/> </mx:GridItem> </mx:GridRow> </mx:Grid> </mx:Application>
5.2 网格容器之间的嵌套
在复杂的页面布局中,常常会使用到几个网格Grid布局容器之间的嵌套。Grid网格的嵌套就像是HTML中Table的嵌套一样。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Grid x="25" y="25"> <mx:GridRow> <mx:GridItem colSpan="2" horizontalAlign="center"> <mx:Label text="会员登录" fontSize="16"/> </mx:GridItem> </mx:GridRow> <mx:GridRow> <mx:GridItem> <mx:Label text="用户名:" fontSize="12"/> </mx:GridItem> <mx:GridItem> <mx:TextInput text=""/> </mx:GridItem> </mx:GridRow> <mx:GridRow> <mx:GridItem> <mx:Label text="密码:" fontSize="12"/> </mx:GridItem> <mx:GridItem> <mx:TextInput text="" displayAsPassword="true"/> </mx:GridItem> </mx:GridRow> <mx:GridRow> <mx:GridItem colSpan="2" horizontalAlign="center"> <mx:Grid> <mx:GridRow> <mx:GridItem> <mx:Button label="登录" fontSize="12"/> </mx:GridItem> <mx:GridItem> <mx:Button label="注册" fontSize="12"/> </mx:GridItem> </mx:GridRow> </mx:Grid> </mx:GridItem> </mx:GridRow> </mx:Grid> </mx:Application>
六、Tile布局
Tile布局可以任意排列子控件,与其他容器不同的是,Tile布局容器是根据宽度来自动调整行和列数量的。
6.1 使用Tile布局
使用<mx:Tile>标签可以定义一个Tile布局容器。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Tile direction="horizontal" x="60" y="39" width="140" height="115"> <mx:Button label="1" width="100%" height="100%" /> <mx:Button label="2" width="100%" height="100%" /> <mx:Button label="3" width="100%" height="100%" /> <mx:Button label="4" width="100%" height="100%" /> <mx:Button label="5" width="100%" height="100%" /> <mx:Button label="6" width="100%" height="100%" /> <mx:Button label="7" width="100%" height="100%" /> <mx:Button label="8" width="100%" height="100%" /> <mx:Button label="9" width="100%" height="100%" /> <mx:Button label="0" width="100%" height="100%" /> <mx:Button label="." width="100%" height="100%" /> <mx:Button label="c" width="100%" height="100%" /> </mx:Tile> </mx:Application>
6.2 设置Tile布局
通过设置tileWidth、paddingTop、verticalGap等属性,可以调整容器中子控件之间的间隔、大小宽度等。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Tile direction="horizontal" x="60" y="39" width="196" height="160" borderStyle="solid" tileWidth="50" paddingTop="10" paddingBottom="10" paddingRight="10" paddingLeft="10" verticalGap="15" horizontalGap="10"> <mx:Button label="1" width="100%" height="100%" /> <mx:Button label="2" width="100%" height="100%" /> <mx:Button label="3" width="100%" height="100%" /> <mx:Button label="4" width="100%" height="100%" /> <mx:Button label="5" width="100%" height="100%" /> <mx:Button label="6" width="100%" height="100%" /> <mx:Button label="7" width="100%" height="100%" /> <mx:Button label="8" width="100%" height="100%" /> <mx:Button label="9" width="100%" height="100%" /> <mx:Button label="0" width="100%" height="100%" /> <mx:Button label="." width="100%" height="100%" /> <mx:Button label="c" width="100%" height="100%" /> </mx:Tile> </mx:Application>
七、 使用面板
一个完整的面板容器包含了标题栏、标题、状态栏和主体内容。面板通常是以功能块为单位分隔。
7.1 创建Panel容器
可以使用<mx:Panel>标签来定义一个面板容器。在面板中可以放置其他类型的组件、容器等。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Panel title="登录窗口" fontSize="14" x="32" y="28"> <mx:Form> <mx:FormHeading label="用户登录" fontSize="16"/> <mx:FormItem label="用户名:" fontSize="12"> <mx:TextInput/> </mx:FormItem> <mx:FormItem label="密码:" fontSize="12"> <mx:TextInput displayAsPassword="true"/> </mx:FormItem> <mx:FormItem> <mx:Button label="登录" fontSize="12"/> </mx:FormItem> </mx:Form> </mx:Panel> </mx:Application>
7.2 添加ControlBar控件
使用ControlBar控件可以设置面板的状态栏区域。ControlBar控件通常被创建在面板Panel容器内。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Panel title="登录窗口" fontSize="14" x="32" y="28"> <mx:Form> <mx:FormHeading label="用户登录" fontSize="16"/> <mx:FormItem label="用户名:" fontSize="12"> <mx:TextInput/> </mx:FormItem> <mx:FormItem label="密码:" fontSize="12"> <mx:TextInput displayAsPassword="true"/> </mx:FormItem> </mx:Form> <mx:ControlBar horizontalAlign="right"> <mx:Button label="登录" fontSize="12"/> <mx:Button label="登录" fontSize="12"/> <mx:Button label="登录" fontSize="12"/> <mx:Button label="登录" fontSize="12"/> <mx:Button label="登录" fontSize="12"/> </mx:ControlBar> </mx:Panel> </mx:Application>
八、弹出窗口
TitleWindow布局容器实际上是一个弹出窗口的面板容器。与面板Panel布局容器不同的是,TitleWindow有一个关闭按钮,用户还可以拖动这个窗口。这个弹出可以是模态的,也可以是非模态的。
8.1 创建TitleWindow容器
要创建一个弹出窗体,需要用到PopUpManager类。在此类中createPopUp()方法可以创建一个弹出窗体。其语法格式为: public static createPopUp(parent:DisplayObject, class:Class, modal:Boolean = false):IFlexDisplayObject 参数说明:
parent:父对象。
class:弹出窗体的类。
modal:是否为模态窗体。
main.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import mx.managers.PopUpManager; // 按钮单击事件 private function btnOpenWnd_click():void { // 弹出新窗口 PopUpManager.createPopUp(this, MyTitleWindow, true); } ]]> </mx:Script> <mx:Button id="btnOpenWnd" label="显示登录窗口" click="btnOpenWnd_click()" x="22" y="25" fontSize="12"/> </mx:Application>
MyTitleWindow.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import mx.managers.PopUpManager; // 关闭窗口 private function closeWindow():void { // 移除窗口对象 PopUpManager.removePopUp(this); } ]]> </mx:Script> <mx:Form> <mx:FormHeading label="用户登录" fontSize="16"/> <mx:FormItem label="用户名:" fontSize="12"> <mx:TextInput/> </mx:FormItem> <mx:FormItem label="密码:" fontSize="12"> <mx:TextInput displayAsPassword="true"/> </mx:FormItem> <mx:FormItem> <mx:Button label="登录" fontSize="12" click="closeWindow()"/> </mx:FormItem> </mx:Form> </mx:TitleWindow>
8.2 向弹出的窗口传递数据
通过PopUpManager类创建弹出窗体的对象,可以获取弹出窗体的数值。
main.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import mx.managers.PopUpManager; // 创建窗体对象 private var pop:MyTitleWindow; // 按钮单击事件 private function btnLoginWnd_click():void { // 创建弹出窗体 pop = MyTitleWindow(PopUpManager.createPopUp(this, MyTitleWindow, false)); // 设置弹出窗体是否显示关闭按钮 pop.showCloseButton = false; // 弹出窗体按钮单击事件 pop.btnLogin.addEventListener(MouseEvent.CLICK, btnLogin_click); } // 登录按钮单击事件 private function btnLogin_click(e:MouseEvent):void { // 返回登录名并设置文本标签内容 lbUser.text = "登录名:" + pop.userName.text; // 移除弹出窗体 PopUpManager.removePopUp(pop); } ]]> </mx:Script> <mx:Label id="lbUser" text="还没有登录" fontSize="14" x="39" y="10"/> <mx:Button id="btnLoginWnd" click="btnLoginWnd_click()" x="39" y="41" fontSize="12" label="登录"/> </mx:Application>
MyTitleWindow.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Form> <mx:FormHeading label="用户登录" fontSize="16"/> <mx:FormItem label="用户名:" fontSize="12"> <mx:TextInput id="userName"/> </mx:FormItem> <mx:FormItem label="密码:" fontSize="12"> <mx:TextInput displayAsPassword="true"/> </mx:FormItem> <mx:FormItem> <mx:Button id="btnLogin" label="登录" fontSize="12"/> </mx:FormItem> </mx:Form> </mx:TitleWindow>
9 实例:通讯录
main.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import mx.events.ListEvent; import mx.managers.PopUpManager; import lalo.ViewModelLocator; // 创建ViewModelLocator对象 private static var modelLocator:ViewModelLocator = ViewModelLocator.getInstance(); private var rowIndex:Number = -1; // 单元格单击事件 private function dgContract_itemClick(e:ListEvent):void { // 获取索引值 rowIndex = e.rowIndex; // 设置每个文本内容 txtUser.text = dgContract.selectedItem.name; txtTel.text = dgContract.selectedItem.tel; txtCorp.text = dgContract.selectedItem.corp; txtMemo.text = dgContract.selectedItem.memo; } // 添加按钮单击事件 private function btnAdd_click():void { // 弹出窗口 PopUpManager.createPopUp(this, NewAddrForm, false); } // 保存按钮单击事件 private function btnSave_click():void { // 修改数据 if(rowIndex >= 0) { modelLocator.arrAddrList[rowIndex]["tel"] = txtTel.text; modelLocator.arrAddrList[rowIndex]["corp"] = txtCorp.text; modelLocator.arrAddrList[rowIndex]["memo"] = txtMemo.text; // 刷新数据模型 modelLocator.arrAddrList.refresh(); } } ]]> </mx:Script> <mx:HDividedBox width="655" x="52" y="40" height="249"> <mx:DataGrid fontSize="12" id="dgContract" dataProvider="{modelLocator.arrAddrList}" itemClick="dgContract_itemClick(event)" width="58%" height="100%"> <mx:columns> <mx:DataGridColumn headerText="联系人" dataField="name"/> <mx:DataGridColumn headerText="联系方式" dataField="tel"/> <mx:DataGridColumn headerText="所属公司" dataField="corp"/> </mx:columns> </mx:DataGrid> <mx:Form width="42%" height="100%" fontSize="12"> <mx:FormHeading label="详细信息" fontSize="16"/> <mx:FormItem label="联系人"> <mx:TextInput id="txtUser" enabled="false"/> </mx:FormItem> <mx:FormItem label="联系方式"> <mx:TextInput id="txtTel"/> </mx:FormItem> <mx:FormItem label="所属公司"> <mx:TextInput id="txtCorp"/> </mx:FormItem> <mx:FormItem label="备注"> <mx:TextArea id="txtMemo"/> </mx:FormItem> <mx:ControlBar> <mx:Button id="btnAdd" label="添加" click="btnAdd_click()"/> <mx:Button id="btnSave" label="保存" click="btnSave_click()"/> </mx:ControlBar> </mx:Form> </mx:HDividedBox> </mx:Application>
NewAddrForm
<?xml version="1.0" encoding="utf-8"?> <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import mx.managers.PopUpManager; import lalo.ViewModelLocator; // 创建ViewModelLocator对象 private static var modelLocator:ViewModelLocator = ViewModelLocator.getInstance(); // 按钮单击事件 private function btnSave_click():void { // 添加数据 modelLocator.arrAddrList.addItem( {name:txtUser.text, tel:txtTel.text, corp:txtCorp.text, memo:txtMemo.text} ); // 关闭窗体 btnClose_click(); } // 关闭按钮单击事件 private function btnClose_click():void { // 移除窗体对象 PopUpManager.removePopUp(this); } ]]> </mx:Script> <mx:Form fontSize="12"> <mx:FormHeading label="添加记录" fontSize="16"/> <mx:FormItem label="联系人"> <mx:TextInput id="txtUser"/> </mx:FormItem> <mx:FormItem label="联系方式"> <mx:TextInput id="txtTel"/> </mx:FormItem> <mx:FormItem label="所属公司"> <mx:TextInput id="txtCorp"/> </mx:FormItem> <mx:FormItem label="备注"> <mx:TextArea id="txtMemo"/> </mx:FormItem> <mx:ControlBar> <mx:Button id="btnSave" label="保存" click="btnSave_click()"/> <mx:Button id="btnClose" label="关闭" click="btnClose_click()"/> </mx:ControlBar> </mx:Form> </mx:TitleWindow>