AS3单选框实现

public class RadioCell extends Sprite
    {
        public var radioMc:Mc;
        public var id:Object;
        public var radioName:String;
        
        public function RadioCell(_id:Object = null, _name:String = "", content:String = "", size:int = 14, isBold:Boolean = false)
        {
            this.buttonMode = true;
            this.useHandCursor = true;
            if(null != _id)
            {
                setData(_id, _name, content, size, isBold);
            }
        }
        
        public function setData(_id:Object, _name:String, content:String, size:int = 14, isBold:Boolean = false):void
        {
            id = _id;
            radioName = _name;
            
            radioMc = new fl_oneSelectMc();
            this.addChild(radioMc);
            radioMc.gotoAndStop(1);
            
            var htmlContent:String = "<font color='#FFCC99' size='"+size+"' face='SimSun'>"+content+"</font>";
            if(true == isBold)
            {
                htmlContent = "<b>"+htmlContent+"</b>";
            }
            
            var txt:TextField = this.createTxtField(htmlContent);
            this.addChild(txt);
            txt.x = 21;
            
            if(txt.textHeight + 5 > 20)
            {
                radioMc.y = (txt.textHeight - 15)*0.5 + 2;
            }
            else
            {
                txt.y = (15 - txt.textHeight)*0.5 + 2;
            }
            
            RadioManager.getInstance().addItem(this);
        }
        
        public function clearSelect():void
        {
            radioMc.gotoAndStop(1);
        }
        
        public function Select():void
        {
            radioMc.gotoAndStop(2);
        }
        
        private function createTxtField(str:String):TextField
        {
            var txtField:TextField = new TextField();
            txtField.selectable = false;
            txtField.width =  120;  
            txtField.height =  50;
            txtField.autoSize = TextFieldAutoSize.LEFT;
            txtField.htmlText = str;
            return txtField;
        }
    }

//管理器

public class RadioManager

{
        private static var instance:RadioManager;
        
        private var radioTypesDict:Dictionary;
        private var radioValueDict:Dictionary;
        
        public function RadioManager()
        {
            radioTypesDict = new Dictionary();
            radioValueDict = new Dictionary();
        }
        
        public static function getInstance():RadioManager
        {
            return instance = instance || new RadioManager();
        }
        
        /**
         * 添加单选项
         */        
        public function addItem(radioCell:RadioCell):void
        {
            if(null == radioTypesDict[radioCell.radioName])
            {
                radioTypesDict[radioCell.radioName] = [];
            }
            var arr:Array = radioTypesDict[radioCell.radioName];
            radioCell.addEventListener(MouseEvent.CLICK, onMouseClickHandler);
            arr[arr.length] = radioCell;
        }
        
        private function onMouseClickHandler(e:MouseEvent):void
        {
            var radioCell:RadioCell = e.currentTarget as RadioCell;
            //已选的就不再遍历了
            if(radioValueDict[radioCell.radioName] == radioCell)
            {
                return;
            }
            
            //上一次选中的去掉
            if(null != radioValueDict[radioCell.radioName])
            {
                (radioValueDict[radioCell.radioName] as RadioCell).clearSelect();
            }
            
            //选中这次点击
            radioCell.Select();
            radioValueDict[radioCell.radioName] = radioCell;
        }        
        
        /**
         * 获得单选框的值
         * @param _name 类型名
         * @return
         */        
        public function getSelectedRadioId(_name:String):Object
        {
            return (radioValueDict[_name] as RadioCell).id;
        }
        
        /**
         * 设置默认选中
         * @param _name 类型
         * @param id 标识
         */        
        public function setDefaultSelectedRadio(_name:String, id:Object):void
        {
            //遍历
            for each(var cell:RadioCell in radioTypesDict[_name])
            {
                if(cell.id == id)
                {
                    cell.Select();
                    break;
                }
            }
        }
        
        /**
         * 设置选框不可点
         */        
        public function disableRadioType(_name:String):void
        {
            for each(var cell:RadioCell in radioTypesDict[_name])
            {
                cell.buttonMode = false;
                cell.useHandCursor = false;
                cell.mouseEnabled = false;
                cell.removeEventListener(MouseEvent.CLICK, onMouseClickHandler);
            }
        }
        
        /**
         * 设置选框可点
         */        
        public function ableRadioType(_name:String):void
        {
            for each(var cell:RadioCell in radioTypesDict[_name])
            {
                cell.buttonMode = true;
                cell.useHandCursor = true;
                cell.mouseEnabled = true;
                cell.addEventListener(MouseEvent.CLICK, onMouseClickHandler);
            }
        }
        
    }

转载于:https://my.oschina.net/u/185335/blog/179800

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值