from 
액션스크립트 3.0 디자인 패턴 상세보기

IconButton.as
package {
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class IconButton extends Sprite {
public function IconButton(text:String):void{
var back:Shape = new Shape();
back.graphics.beginFill(0xeeeeee,1);
back.graphics.drawRect(0,0,100,20);
back.graphics.endFill();
addChild(back);
var icon:Shape = new Shape();
icon.graphics.beginFill(0xaaaaaa,1);
icon.graphics.drawRect(4,4,12,12);
icon.graphics.endFill();
addChild(icon);
icon.addEventListener(MouseEvent.MOUSE_OVER, onIconOver, false, 0, true);
icon.addEventListener(MouseEvent.MOUSE_OUT, onIconOut, false, 0, true);
var label:TextField = new TextField();
label.height = 20;
label.x = 22;
label.text = text;
label.selectable = false;
label.autoSize = TextFieldAutoSize.LEFT;
addChild(label);
private function onIconOver(e:MouseEvent){
var colorTransform:ColorTransform = new ColorTransform();
colorTransform.color  =0xffffff;
(e.target as Sprite).transform.colorTransform = colorTransform;
}
private function onIconOut(e:MouseEvent){
var colorTransform:ColorTransform = new ColorTransform();
colorTransform.color  =0xaaaaaa;
(e.target as Sprite).transform.colorTransform = colorTransform;
}
}
}

ButtonEx.as
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
public class ButtonEx extends Sprite {
public function ButtonEx(){
var button:IconButton = new IconButton("test");
button.addEventListener(MouseEvent.MOUSE_UP, MouseUp, false, 0, true);
button.addEventListener(MouseEvent.MOUSE_UP, MouseUp, true, 0, true);
addChild(button);
}
private function MouseUp(e:MouseEvent){
trace("phase : " + e.eventPhase);
trace("target : " + e.target);
trace("currentTarget : " + e.currentTarget);
}
}
}

test 라는 부분을 선택할 경우 출력내용.

phase : 1
target : [object TextField]
currentTarget : [object IconButton]
phase : 3
target : [object TextField]
currentTarget : [object IconButton]

캡쳐 단계에서 이벤트를 디스패치 할 것인지 
아니면 타겟이나 버블 단계에서 할 것 인지에 대한 변화를 볼 수 있다.
또한 텍스트 부분을 선택함으로써
실제로 이벤트를 디스패치한 객체가 무엇인지(target)
이벤트 리스너로 등록된 객체가 무엇인지(currentTarget)
알 수 있다.

저작자 표시 비영리 변경 금지