`

ComboBox与itemRenderer

阅读更多

转自:http://hi.baidu.com/half_cup_coffee/blog/item/6447e181e4dd05d3bd3e1ebf.html/cmtid/abb7f5f07ee3eccd7831aab9

在自定义一个itemRenderer来显示下拉框中的数据时,遇到一个问题。
定义的itemRenderer是个用来显示颜色块的和相应文字说明的。在下拉框的列表中显示很正常,有颜色也有相应的文字说明,如下图:


但是在选中某条数据,下拉框收起来后,在ComboBox的TextInput里只显示了当前的标签,并没有显示对应的颜色。



因为下拉框默认显示选中项是用的TextInput组件,因此并不能像列表里的itemRenderer一样能显示前面的颜色块,不过我们可以继承一个 ComboBox,然后重载createChildren()和updateDisplayList()方法,去掉默认的TextInput,改用实例化一个itemRenderer来显示选中的数据,这样就能保证下拉框里和已经选中的以相同的方式显示。

下面是一个从ComboBox继承的组件ComboBoxEx(实现方式参考了国外某网站上的代码)

package bss.flex.components
{
   import mx.binding.utils.BindingUtils;
   import mx.controls.ComboBox;
   import mx.core.UIComponent;

   public class ComboBoxEx extends ComboBox
   {
       public function ComboBoxEx()
       {
           super();
       }
       
        protected var textInputReplacement:UIComponent;

        override protected function createChildren():void {
            super.createChildren();

            if ( !textInputReplacement ) {
                if ( itemRenderer != null ) {
                    //删除缺少的TextInput组件
                    removeChild(textInput);

                    //用itemRenderer创建一个实例并添加
                    textInputReplacement = itemRenderer.newInstance();
                    //绑定属性
                    BindingUtils.bindProperty(textInputReplacement, "data", this, "selectedItem", true);
                    addChild(textInputReplacement);
                }
            }
        }

        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
            super.updateDisplayList(unscaledWidth, unscaledHeight);

            if ( textInputReplacement ) {
                textInputReplacement.width = unscaledWidth;
                textInputReplacement.height = unscaledHeight;
            }
        }
       
   }
}

定义一个用来显示颜色说明的itemRenderer-ColorRenderer.mxml,很简单一个HBox里放个Canvas和Label,Canvas用来显示颜色,Label用来显示标签

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"
   horizontalScrollPolicy="off" verticalScrollPolicy="off"
   verticalAlign="middle" paddingLeft="5"
   width="100%" height="25">
   <mx:Canvas width="16" height="16" 
       borderStyle="solid" cornerRadius="2"
       backgroundColor="{data.color}"/>
   <mx:Label text="{data.label}"/>
</mx:HBox>

准备测试数据,就直接在下拉框的ComboBox的dataProvider里写死:
    <components:ComboBoxEx 
       itemRenderer="bss.flex.components.itemrenderer.ColorRenderer">
       <components:dataProvider>
           <mx:Object color="0x00EA00" label="新建"/>
           <mx:Object color="0xFF9D4C" label="已退单"/>
           <mx:Object color="0xFF80FF" label="未通过审核"/>
           <mx:Object color="0xFFFF80" label="请求撤销"/>
           <mx:Object color="0x808080" label="作废"/>
       </components:dataProvider>       
   </components:ComboBoxEx>

下面这个是最终的效果图,左边的是普通的ComboBox,右边是ComboBoxEx:

在家上网赚钱更容易

分享到:
评论

相关推荐

    flex ComboBox checkbox

    为了将CheckBox与ComboBox结合,我们需要自定义ComboBox的itemRenderer,这是一个负责渲染ComboBox列表项的组件。itemRenderer允许我们定制每个列表项的显示方式,包括添加复选框。 **创建自定义itemRenderer:** 1...

    DataGrid的itemRenderer and HeaderRenderer

    创建`combobox`的`itemRenderer`需要确保`ComboBox`的`data`属性与数据项绑定,并且根据数据模型的需要,动态填充`ComboBox`的下拉选项。`headerRenderer`中一般不使用`combobox`,因为列头通常用于筛选或排序,而...

    Flex DataGrid 内嵌ComboBox 再内嵌一个 DataGrid

    在DataGrid的列定义中,我们将ComboBox作为ItemRenderer指定给特定列,这样当用户查看或编辑该列时,会看到ComboBox而非普通的文本字段。 更进一步,我们还要在ComboBox中嵌套一个DataGrid。这种设计适用于需要在...

    flex实现 ComboBox中下拉checkbox

    &lt;mx:List dataProvider="{data}" itemRenderer="com.mycompany.renderers.CheckboxItemRenderer" /&gt; ``` 其中,`CheckboxItemRenderer`是我们自定义的渲染器,它负责在每个数据项中显示Checkbox。 2. **...

    Flex 下拉框为Tree的ComboBox

    这种需求可以借助于"TreeComboBox"来实现,它将传统的ComboBox与Tree控件相结合,提供了一种在下拉菜单中展示层次结构数据的方式。今天我们将深入探讨如何在Flex中实现"下拉框为Tree的ComboBox",并结合提供的...

    内渲染器_ItemRenderer

    - 内渲染器是一种特殊类型的组件,用于定义列表控件(如List或ComboBox)中每一项的外观和行为。 - 它可以是一个简单的文本标签,也可以包含复杂的布局和交互元素,如图像、按钮、滑块等。 - 内渲染器可以根据...

    flex DataGrid 嵌入Combobox列拖动下拉条数据混乱

    2. **自定义ItemRenderer**:由于默认的ItemRenderer可能无法满足需求,因此需要创建自定义的Combobox ItemRenderer。在这个自定义渲染器中,你需要确保在列拖动后,Combobox的数据能够根据新的列索引进行更新。 3....

    flex中ComboBox嵌套checkbox的例子以及源代码

    - 通过阅读源代码,我们可以看到如何将Checkbox与ComboBox集成,以及如何处理相关事件。 5. **实际应用**: - 这种组合在某些场景下特别有用,比如用户需要从大量选项中多选时,可以提高用户体验,因为他们可以...

    ComboBox in DataGrid tutorial

    #### DataGrid与ComboBox DataGrid 是一种用于显示表格数据的Flex组件,而ComboBox则是用于让用户选择列表中的一个选项的下拉列表框。在这个教程中,我们关注的是如何将ComboBox动态地添加到DataGrid的每一行中。 ...

    带复选框的树状ComboBox

    我们可以使用`Tree`组件的特性,如`mx.controls.Tree`,来处理树形数据,然后将其与ComboBox的下拉列表结合起来。 接下来,添加复选框到每个树节点,我们可以创建自定义的List或DataGridItemRenderer,这个渲染器会...

    ItemRenderer的用法

    在ActionScript和Flex开发中,`ItemRenderer`是一种关键组件,用于自定义MX或Spark数据控件(如List、ComboBox等)中项呈现的方式。它允许开发者为数据集中的每一项提供独特的视觉表现,增强用户体验并提升应用的...

    FLEX中下拉框嵌入Checkbox

    在ItemRenderer中,你需要将数据对象与Checkbox的属性进行绑定,比如label和selected状态。这通常通过data属性完成,data属性会传递ComboBox的dataProvider中的每一项。 ```actionscript override public function...

    flex 下拉 带复选框 多选

    接下来,我们将新创建的ItemRenderer类设置为ComboBox或DropDownList的itemRenderer属性。这样,每项列表项都会使用这个自定义的渲染器来展示。 在实现过程中,我们还需要处理以下几点: 1. 数据绑定:确保每个...

    flexdatagrid实现列中下拉列表与行勾选功能

    在`itemRenderer`中,我们绑定`ComboBox`的数据源到当前单元格的数据项,这样用户就可以从下拉选项中选择值。同时,我们还需要监听`ComboBox`的`change`事件,当选择变化时更新数据模型,以保持数据的一致性。 接...

    Flex combox

    4. **数据绑定**:确保Tree的数据源与ComboBox的下拉列表项相匹配。通常,数据源是一个ArrayCollection或XMLListCollection,其中每个元素都包含了树节点的文本和选择状态等信息。 5. **同步选中状态**:当用户在...

    FLEX中DATAgird的学习

    `itemRenderer` 与 `itemEditor` 不同,它始终显示,不仅在编辑状态下。`itemRenderer` 用于自定义单元格的外观和行为。例如,如果你想要一个静态显示的 `Label`,即使在非编辑状态下也能显示数据,可以设置 `...

    DataGridCombox下拉列

    为了在`DataGrid` 的某一列实现下拉列表,我们需要创建一个新的组件类,继承自`mx.controls.ComboBox` 或 `spark.components.DropDownList`,然后根据需求进行定制。这可能包括调整样式、添加事件监听器、处理特定的...

    Flex动态生成可编辑的DataGrid具体实现代码

    例如,Combobox在使用ItemRenderer时无法直接绑定数据值,这需要使用ItemEditor来实现。不过,当需要在运行时获得已经渲染的组件实例时,常规方法可能无法直接获取到这个对象。通过不懈的努力和搜索,开发者找到了...

    Flex 自定义ToolTip

    `Main.mxml`文件是Flex应用程序的入口点,其中包含了一个水平列表`HorizontalList`,以及一个组合框`ComboBox`。列表中的每个项目都绑定了一个自定义的`ToolTip`,这个`ToolTip`是由`CustomToolTip.mxml`提供的。...

    Flex 写的一个combox多选控件

    2. **自定义下拉列表**:通过覆盖dropDown属性,我们可以创建一个自定义的List组件,其中的itemRenderer使用我们之前编写的HgCheckBox.as。这样,每个列表项都会显示一个复选框。 3. **处理多选逻辑**:当用户在...

Global site tag (gtag.js) - Google Analytics