3.21.1 问题你需要访问并改变多个对话框。3.21.2 解决办法使用PopUpManager 类的createPopUp 方法。3.21.3 讨论+展开-ActionScriptvarpop:Panel=(PopUpManager.createPopUp(this,mx.containers.Panel,false,PopUpManagerChildList.POPUP)asPanel);访问并改变多个对话框需要有对这些弹出控件的引用,但是PopUpManager.addPopUp 方法并有提供这个引..
3.20.1 问题我们需要生成一个对话框,该对话框具有和呼出它的组件相同尺寸和位置。3.20.2 解决办法使用MouseEvent 的target 属性来确定调用该方法的组件的信息,同时,使用mx.geometry.Rectangle 类来确定呼出的组件实际宽高及其在Stage 内的位置。3.20.3 讨论为了保证无论应用程序的layout 设定为absolute, horizontal,还是vertical,对话框都会..
3.19.1 问题我们需要创建一个Alert 控件并且控制它的显示。3.18.2 解决办法使用mx.controls.Alert 类的show 方法并且给show 方法注册一个回调。3.19.3 讨论我们可以通过使用mx.controls.Alert 的静态引用,设置所有Alert 控件的属性,这些设定的属性值会一直保存到被再次覆盖为止。Alert 类的show 方法需要一个警告所要使用的消息,一个标题,一..
3.18.1 问题我们需要创建一个拥有的tab 项的TabNavigator,即具有关闭按钮的tab 项,当点击这个按钮的时候同时移除对应的tab 项和对应的索引的tab 项下的所有子组件。3.18.2 解决办法使用flexlib 库内的SuperTabNavigator 组件。3.18.3 讨论Flexlib 库是一组由多个Flex 开发者开发的开源控件,提供可在所有Flex 工程内使用的组件。SuperTabNavig..
3.17.1 问题我们需要从TabNavigator 动态添加和移除tab 项,或者偶尔禁用某些tab 项。3.17.2 解决办法使用TabNavigator 的addChild 和removeChild 方法添加或者移除子组件,同时设置子组件的enabled 属性来启用或者禁用TabNavigator 里的某个tab 项。3.17.3 讨论所有添加到TabNavigator 中的子组件,都会在TabNavigator 顶部的导航条添加一个新t..
3.16.1 问题我们需要创建一个可以通过拖拽角落图标而调整大小的容器。3.16.2 解决办法在拖拽图标上使用MouseEvent 类侦听mouseDown、mouseMove 和mouseUp 事件。当拖拽图标释放的时候重新设置容器的尺寸。3.16.3 讨论通过在MXML 和ActionScript 里为这些事件添加侦听,我们可以在Icon 对象上侦听到mouseDown 事件。当捕获mouseDown 事件时,为鼠..
3.15.1 问题我们要保证组件仅仅在需要显示在屏幕上的时候才被创建。3.15.2 解决办法为容器类设置创建方针队列并且根据需要对每个子组件使用creationIndex。3.15.3 讨论Container 类默认情况下仅仅在要显示组件的时候创建它,因为UIComponent 默认的creationPolicy 值为auto。换句话说,当视图(view)设置成可视的时候,如果还没有创建该视图,则组..
3.14.1 问题我们需要将ViewStack的selectedIndex属性绑定到一个可以在组件的其他地方改变的整数变量。3.14.2 解决办法申明一个可绑定的变量,然后将ViewStack 控件的选中索引属性绑定到它上。3.14.3 讨论在LinkBar 控件的情形下,ViewStack 的选中项目会自动绑定到LinkBar 的选中项目上。当使用其它控件时,ViewStack 或其他拥有多个同时显示的子..
3.13.1 问题我们需要使用LinkBar 组件控制ViewStack3.13.2 解决办法使用LinkBar 的selectedIndex 或selectedItem 属性的任意之一来决定显示ViewStack的哪一条。3.13.3 讨论LinkBar 既可以使用数组作为数据提供者,也可以使用一个拥有多个子组件的容器(例如ViewStack)作为数据提供者。后者对此节最有用。当你传递一个容器的时候,该容器选中显示..
3.12.1 问题我们需要创建一个TitleWindow 组件来显示对话框并在满足一定标准的时候使用PopUpManager 移除该对话框。3.12.2 解决办法TitleWindow 组件,继承自Panel,添加了可以为窗口设置标题的功能,同时也为边框提供样式信息。3.12.3 讨论PopUpManager.removePopUp(this);此例中,使用TitleWindow 为应用程序创建一个登陆界面。PopUpManager 类..
3.11.1 问题为了提高应用的响应能力,我们需要保证容器的所有子组件在应用初始化的时候即被创建。3.11.2 解决办法使用容器的类的creationPolicy 属性来决定什么时候创建组件。3.11.3 讨论所有容器,事实上所有UIComponent 组件都使用一种三步走的过程来创建本身,即创建成员属性、创建子组件和设置自己的布局。所有容器的第一步都是由框架调用它..
3.10.1 问题你既要控制Box 组件的横向和纵向布局,也要控制组件之间的横向和纵向间距及其子组件的居中设置。3.10.2 解决办法使用verticalAlign 和horizontalAlign 属性同时使用direction 属性设置Box 的布局方向。3.10.3 讨论mx.containers.Box 类定义了几个属性,来控制Box 内的子组件的布局。它们是:direction决定容器如何布置其子组件。值可..
3.9.1 问题你需要禁用容器的垂直滚动条并且在某个组件上创建一个用户可以通过鼠标滑过来控制滚动的区域。3.9.2 解决办法使用horizontalScrollPolicy、verticalScrollPolicy 和verticalScrollPosition 属性。3.9.3 讨论我们可以通过horizontalScrollPolicy 和verticalScrollPolicy 属性控制滚动条。如果要使其中一个或全部滚动条始终显示,则将其..
3.8.1 问题你要为多段文字创建一个排版流程(layout flow)。3.8.2 解决办法创建并添加一个ConstraintColumn 和ConstraintRow 对象到Canvas 组件,然后使用它们为子组件设置约束条件。3.8.3 讨论所有支持约束条件的容器都具有两个数组来存储加到该Canvas 的行和列的轨迹。只需为各自数组添加现成的约束条件即可保证所有的子组件可以存取约束条件到..
3.7.1 问题你想使用独特的约束性属性成行或者成列地定义独特的子组件,而不是对每个子组件进行定义。3.7.2 解决办法在可添加约束条件的地方使用ConstraintRow 和ConstraintColumn 属性来定义容器领域。3.7.3 讨论ConstraintRow 和ConstraintColumn 对象让我们可以定义一族用来布置组件的约束条件。我们使用这些约束条件与使用容器边缘来定义约束..
3.6.1 问题你需要添加多个子组件到某个组件里,并且保证如果子组件的数量扩大超过一定数量的时候,子组件将添加到容器下一行去。3.6.2 解决办法使用maxWidth 或者maxHeight 属性来决定组件内的子组件放置在何处。3.6.3 讨论maxWidth 和maxHeight 样式属性定义了组件父亲允许其显示的最大高度和宽度。下面的代码段里,将检查maxWidth 样式属性以保..
3.5.1 问题需要在父组件的内边界基础上来定义子组件的尺寸。3.5.2 解决办法使用约束性属性:left, right, top, and bottom.3.5.3 讨论UIComponent 类的约束性属性允许为组件定义制约于父组件装订线的宽度和高度。一个宽度为200 像素的组件,如果它的子组件的left 和right 属性均为20 像素,则该子组件的宽度将为160 像素。同样,高度为200 像素的..
3.4.1 问题需要程序在运行时从容器添加和移除子组件而不使用Repeater 或者DataProvide 控件。3.4.2 解决办法使用addChild 或者addChildAt 方法来添加子组件,同理,使用removeChildAt 或者removeAllChildren 方法来移除子组件。3.4.3 讨论Flex 方法使得添加和移除子组件操作变得容易,但是UIComponent 控件和容器则遵从稍显不同的两组规则。addC..
3.3.1. 问题我想跟踪用户鼠标位置,可以是相对于父容器或相对于容器中其他子组件。3.3.2. 解决办法使用Stage 和MouseEvent 类的本地位置属性以及所有容器都继承自UIComponent 的mouseX和mouseY 属性。3.3.3. 讨论MouseEvent 类有四个属性可用于确定鼠标位置。localX 和localY属性提供与抛出mouse 事件相关的组件位置,而stageX 和stageY 提供与S..
3.2.1 问题需要根据父亲控件的尺寸来设置子组件们的尺寸。3.2.2 解决办法使用百分比设置尺寸的时候,当控件的尺寸变化时,Flex 框架会自动调整它的子组件的尺寸。3.2.3 讨论百分比布局方式是一种强大工具,可以让你轻松地定义一个子组件的尺寸和位置,同时兼顾其父亲容器。例如,下面的RelativePositioningChild.mxml 组件就把自己的宽度设置为其..
3.1.1 问题我们需要从横向或纵向来布置多种不同类型的子组件并且控制它们的布局。3.1.2 解决办法使用HBox 或者HBox 容器,并且分别为HBox 或者HBox 设置horizontalGap 或者verticalGap风格属性,达到设置控件之间间距的目的。3.1.3 讨论通过扩展普通mx.containers.Box 基类,HBox 和Vbox 组件分别从横向或者纵向布置它们的子组件,并且它们可以拥..
容器几乎涉及到了Flex 框架mx.containers 包内的所有类。容器继承自UIComponent类,添加了布局管理功能,使用一定的创建方针来控制或管理子组件的创建,和自动滚动功能。容器的不同实现具有不同的特性,但是所有的容器都具有决定子组件位置、使用约束条件或风格来布置子组件和控制滚动以及其子组件如何响应滚动事件的功能。约束是Flex3 的新特性..
2.14.1. 问题我想要在用户聚焦在一个标签上时,显示一个弹出窗口,并且当用户离开聚焦的时候关闭这个弹出窗口。2.14.2. 解决办法使用focusIn 和focusOut 事件(在InteractiveObject 类的子类的所有实例都可用)来调用PopUpManager 相关的方法。2.14.3. 讨论在用户聚焦时启动一个窗口,你可以重用前两节的代码。不过就是把弹出窗口的启动从用户点..
2.13.1. 问题我想要自定义弹出窗口的边框来显示窗口。2.13.2. 解决办法创建一个PanleSkin 类的子类,覆盖updateDisplayList 方法来绘画调出箭头。设定这个子类为弹出窗口的borderSkin 风格。2.13.3. 讨论这个技术是基于Section 2.12CustomPopUp 组件修改的。定制你的窗口边框,这次设一个自定义类CustomPanelSkin 到borderSkin 风格。+展开 -XML..
2.12.1. 问题我想要在使用弹出窗口时给用户显示附加信息。2.12.2. 解决办法通过用户交互,使用PopUpManager 来创建TitleWindow 组件实例2.12.3. 讨论Flex 框架包含了一个PopUpManager 类,它包含了若干静态方法来管理穿件,放置,移除Flex应用程序的顶级窗口。如下代码所示:+展开-XMLmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"l..
2.11.1. 问题你想要允许用户在一个日历样式的控件中选择日期。2.11.2. 解决办法使用DateField 控件或DataChooser 控件让用户选择日期。2.11.3. 讨论Flex 框架提供了两个控件用来实现日历样式的功能:DateField 和DateChooser 控件。DateField控件提供了一个TextInput 控件和一个点击可以打开日历的日历图标。DateChooser,则不同,它提供了一个可..
2.10.1. 问题我需要向用户显示一个模式消息并提供可供用户选择的操作选项2.10.2. 解决办法使用Alert 控件来显示信息。2.10.3. 讨论Alert 控件提供了一个带按钮的模式窗口,用户可以点击来回答对话框的消息。Alert 控件不能MXML 创建。你必须使用ActionScript 才能实现,例如:+展开-XMLmx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"l..
2.9.1. 问题我想让菜单对用户的交互作出响应。2.9.2. 解决办法给MenuBar 控件的itemClick 事件添加事件监听器。2.9.3. 讨论为MenuBar 控件的itemClick 事件指定一个监听处理函数handleMenuClick 来处理菜单栏交互点击。当用户选则一个菜单项的时候itemClick 事件就会被触发。监听函数会接收到作为参数传来的MenuEvent 对象。MenuEvent 对象包含了..
2.8.1. 问题动态的来填充和修改一个菜单栏。2.8.2. 解决办法使用ActionScript 为MenuBar 控件的dataProvider 属性分配一个Collection 对象(例如ArrayCollection 或者XMLListCollection)。2.8.3. 讨论Flex3 中的MenuBar 控件支持运行时菜单栏动态创建。本节会创建一个带有MenuBar 控件的程序,在程序初始化的时候使用一个ArrayCollection 来填充..
2.7.1. 问题我需要通过数据提供器来创建一个菜单栏2.7.2. 解决办法为mxml 中定已的MenuBar 控件的dataProvider 属性分配一个Collection 对象(例如ArrayCollection 或者XMLListCollection)。2.7.3. 讨论在MXMl中使用数据来填充MenuBar控件的最简单办法,就是在控件内部创建一个XMLList的实例。+展开-XMLmx:Applicationxmlns:mx="http://www.ado..