3.28.1 问题你需要创建一个圆角和背景图片的Hbox。3.28.2 解决办法加载一个图片对象并且使用beginBitmapFill 方法创建一个位图填充。3.28.3 讨论如果背景不是一张图片的话,设置Hbox 的cornerRadius 会出现圆角。但是,如果按照下面这样给HBox 设置一张背景图片:+展开-XMLmx:HBoxxmlns:mx="http://www.adobe.com/2006/mxml"width="400"height="..
3.27.1 问题你想要让用户可以在Tile 容器里面拖拽其瓷砖(tile)并且在用户放下瓷砖(tile)的时候容器重组。3.27.2 解决办法使用Tile 继承自DisplayObjectContainer 类的swapChildrenmethod 方法来改变Tile 内子组件的位置。3.27.3 讨论Tile 容器给子组件布局的方式和Box 大体相同,除了有空间放置适合非第一方向的第二渲染器存在的情形,Tile ..
3.26.1 问题你需要无破坏地从容器的已有布局中移动子组件。3.26.2 解决办法使用UIComponent 类的includeInLayout 属性同时把visibility 设置为空。3.26.3 讨论某容器的子组件的includeInLayout 属性表明该子组件是否包含在父亲布局子组件使用的任意布局计划中:VBox, HBox, 或一个Canvas 的居中设置。如果仅仅简单地将子组件的visibility 设置为..
3.25.1 问题你需要它的根据子组件改变某个容器的尺寸。3.25.2 解决办法覆盖容器的measure 属性,当Flex 框架调用updateDisplayList 方法的时候调用该属性。3.25.3 讨论无论何时,只要容器需要确定子组件有多大以及根据所有的式样和约束信息自己有多大的时候,Flex 框架都会调用measure 方法来确定容器本身的尺寸。类似3.24 节覆盖updateDisplayL..
3.24.1 问题你需要根据类型以及类型的属性来布置容器的子组件。3.24.2 解决办法覆盖UIComponent 的updateDisplayList 方法来移动子组件。3.24.3 讨论要在任何Container 或者UIComponent 对象内覆盖任何布局或设置大小的逻辑,只要覆盖updateDisplayList 方法并在super.updateDisplayList分方法之后插入你自己的布局逻辑即可。本节专注于如何通过..
3.23.1 问题现在你需要创建一个模板组件以处理传入的多种类型组件,同时也需要延迟实例化组件以提高启动效率。3.23.2 解决办法使用IdeferredInstance 标记来指定一个数组或者属性处理所有传入的组件类型,组件实例化的同时也创建它的子组件。3.23.3 讨论所有UIComponents 都实现IdeferredInstance 接口并且允许将子组件添加到某个数组中,然后在..
3.22.1 问题你需要在容器上控制默认的滚动行为,同时控制滚动通过单独的控件。3.22.2 解决办法根据需要滚动到的子组件的索引,使用getChildAt 方法获取滚动时经过的所有子组件,并计算滚动经过的这些子组件的高度之和。然后使用计算得到的值来设置容器的verticalScrollPosition 属性值。3.22.3 讨论在下面的例子中,包含子组件的Vbox 将vertical..
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. 讨论在用户聚焦时启动一个窗口,你可以重用前两节的代码。不过就是把弹出窗口的启动从用户点..