package comp { import flash.events.KeyboardEvent; import flash.events.MouseEvent; import flash.ui.Keyboard; import mx.controls.Label; import mx.controls.TextInput; public class EditableLabel extends TextInput { private var _label: Label; public function EditableLabel() { super(); editable = false; } override public function set editable(value:Boolean):void{ super.editable = value; if (this != null) this.invalidateDisplayList(); } override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { super.updateDisplayList(unscaledWidth, unscaledHeight); //this.addEventListener(MouseEvent.CLICK, changeToLabel); if (this.editable) { if(_label != null) this.parent.removeChild( this._label ); this.includeInLayout = true; this.visible = true; this.addEventListener(KeyboardEvent.KEY_DOWN, textInputKeydown); } else { if(_label == null) _label = new Label(); _label.text = this.text; var index: int = this.parent.getChildIndex( this ); this.parent.addChildAt( _label, index ); this._label.height = this.height; this._label.width = this.width; this._label.x = this.x; this._label.y = this.y; this._label.addEventListener(MouseEvent.CLICK, changeToTextInput) this.includeInLayout = false; this.visible = false; } } private function changeToTextInput(e:MouseEvent): void { editable = true; } private function changeToLabel(e:MouseEvent): void { editable = false; } private function textInputKeydown(event:KeyboardEvent):void{ if (event.keyCode==Keyboard.ENTER) editable = false; } } }