AS3 RadioButton ---- 单选框控件

来源:互联网 发布:stc89c51数据手册 编辑:程序博客网 时间:2024/06/05 15:46
package{import controlsEvents.RadioButtonEvent;import flash.display.Shape;import flash.display.Sprite;import flash.events.Event;import flash.events.MouseEvent;import flash.filters.GlowFilter;/** * 单选按钮 * @author Jave.Lin */public class RadioButton extends Sprite{private var _tf:Label;private var _circle:Shape;private var _checked:Boolean=false;private var _isDowned:Boolean=false;public function get text():String{return _tf.text;}public function set text(value:String):void{if(_tf.text!=value){_tf.text=value;_tf.y=-5/2;}}public function get checked():Boolean{return _checked;}public function set checked(value:Boolean):void{if(_checked!=value){_checked=value;redraw();dispatchEvent(new RadioButtonEvent(RadioButtonEvent.ON_CHECKED_CHANGED));}}public function RadioButton(){super();initialize();}private function initialize():void{_tf=new Label();_tf.x=10;addChild(_tf);_circle=new Shape();addChild(_circle);if(stage){onAddedToStageHandler();}else{addEventListener(Event.ADDED_TO_STAGE,onAddedToStageHandler);}redraw();}private function onAddedToStageHandler(e:Event=null):void{removeEventListener(Event.ADDED_TO_STAGE,onAddedToStageHandler);addEventListener(Event.REMOVED_FROM_STAGE,onRemovedFromStageHandler);addEventListener(MouseEvent.MOUSE_OVER,onMouseOverHandler);addEventListener(MouseEvent.MOUSE_OUT,onMouseOutHandler);addEventListener(MouseEvent.MOUSE_DOWN,onMouseDownHandler);addEventListener(MouseEvent.MOUSE_UP,onMouseUpHandler);addEventListener(MouseEvent.CLICK,onClickHandler);}private function onClickHandler(e:MouseEvent):void{checked=!checked;}private function onMouseUpHandler(e:MouseEvent=null):void{if(_isDowned){_isDowned=false;this.x-=1;this.y-=1;}}private function onMouseDownHandler(e:MouseEvent):void{if(!_isDowned){_isDowned=true;this.x+=1;this.y+=1;}}private function onMouseOutHandler(e:MouseEvent):void{removeEventListener(MouseEvent.MOUSE_OUT,onMouseOutHandler);addEventListener(MouseEvent.MOUSE_OVER,onMouseOverHandler);onMouseUpHandler();_circle.filters=null;}private function onMouseOverHandler(e:MouseEvent):void{removeEventListener(MouseEvent.MOUSE_OVER,onMouseOverHandler);addEventListener(MouseEvent.MOUSE_OUT,onMouseOutHandler);_circle.filters=[new GlowFilter(0x00ff00,1,3,3,3)];}private function onRemovedFromStageHandler(e:Event):void{removeEventListener(Event.REMOVED_FROM_STAGE,onRemovedFromStageHandler);removeEventListener(MouseEvent.MOUSE_OVER,onMouseOverHandler);removeEventListener(MouseEvent.MOUSE_OUT,onMouseOutHandler);removeEventListener(MouseEvent.MOUSE_DOWN,onMouseDownHandler);removeEventListener(MouseEvent.MOUSE_UP,onMouseUpHandler);removeEventListener(MouseEvent.CLICK,onClickHandler);}private function redraw():void{_circle.graphics.clear();_circle.graphics.lineStyle(1);_circle.graphics.moveTo(5+5,0+5);var perAngle:Number=(Math.PI*2)/180;for (var i:int = 0; i < 180; i++) {_circle.graphics.lineTo(Math.cos(i*perAngle)*5+5,Math.sin(i*perAngle)*5+5); }//_circle.graphics.lineTo(5,0);if(_checked){_circle.graphics.beginFill(0x00ff00,0.5);_circle.graphics.drawCircle(5,5,4);_circle.graphics.endFill();}}}}


运行效果:

package{import controlsEvents.RadioButtonEvent;import flash.display.Sprite;import flash.events.MouseEvent;public class ControlsTest extends Sprite{private var rbt:RadioButton;public function ControlsTest(){rbt=new RadioButton();rbt.text="test";rbt.x=100;rbt.y=100;addChild(rbt);rbt.addEventListener(RadioButtonEvent.ON_CHECKED_CHANGED,onCheckedChangedHandler);}private function onCheckedChangedHandler(e:RadioButtonEvent):void{trace(rbt.checked);}}}


补上:事件类:

package controlsEvents{import flash.events.Event;public class RadioButtonEvent extends Event{public static const ON_CHECKED_CHANGED:String="ON_CHECKED_CHANGED";public function RadioButtonEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false){super(type, bubbles, cancelable);}}}



图片:


原创粉丝点击