import flash.display.DisplayObject; import mx.controls.ComboBox; import mx.core.IFlexDisplayObject; import mx.core.UIComponent; import mx.controls.TextInput; public class IconComboBox extends ComboBox { public function IconComboBox() { super(); } private var iconHolder:UIComponent; override protected function createChildren():void { super.createChildren(); iconHolder = new UIComponent(); addChild(iconHolder); } override protected function measure():void { super.measure(); if (iterator) { var iconClass:Class = iterator.current.icon; var icon:IFlexDisplayObject = new iconClass() as IFlexDisplayObject; while (iconHolder.numChildren > 0) iconHolder.removeChildAt(0); iconHolder.addChild(DisplayObject(icon)); measuredWidth += icon.measuredWidth; measuredHeight = Math.max(measuredHeight, icon.measuredHeight + borderMetrics.top + borderMetrics.bottom); } } override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { super.updateDisplayList(unscaledWidth, unscaledHeight); if(!selectedItem) return; var iconClass:Class = selectedItem.icon; var icon:IFlexDisplayObject = new iconClass() as IFlexDisplayObject; while (iconHolder.numChildren > 0) iconHolder.removeChildAt(0); iconHolder.addChild(DisplayObject(icon)); iconHolder.y = (unscaledHeight - icon.measuredHeight) / 2; iconHolder.x = borderMetrics.left; textInput.setStyle("paddingLeft", 16); } }
引入代码:
<components:IconComboBox x="528" y="90"
focusEnabled="true"
id="a_presences"
filters="{[]}"
dataProvider="{PresenceManager.presence}"
rowCount="{PresenceManager.presence.length}"
close=""
mouseDown=""
editable="true"
width="60" fontSize="11" />