| Flex 2 ÄÄÆÛ³ÍÆ®ÀÇ ÀÛ¼º°ú È®Àå > ActionScript ÄÄÆÛ³ÍÆ®ÀÇ ÀÛ¼º > ActionScript ¿¡ ÀÇÇÑ È®ÀåµÈ ºñÁÖ¾ó ÄÄÆÛ³ÍÆ®ÀÇ ÀÛ¼º > ¿¹ :º¹ÇÕ ÄÄÆÛ³ÍÆ®ÀÇ ÀÛ¼º > ¿¹ : º¹ÇÕ ÄÄÆÛ³ÍÆ® > ModalText ÄÄÆÛ³ÍÆ®ÀÇ ÀÛ¼º | |||
ModalText ÄÄÆÛ³ÍÆ®ÀÇ ÀÛ¼º
´ÙÀ½ÀÇ Äڵ忹¿¡¼´Â, ModalText ÄÄÆÛ³ÍÆ®ÀÇ class Á¤ÀǸ¦ ±¸ÇöÇϰí ÀÖ½À´Ï´Ù. ModalText ÄÄÆÛ³ÍÆ®´Â,Button ÄÁÆ®·Ñ°ú TextArea ÄÁÆ®·ÑÀ» Æ÷ÇÔÇÑ º¹ÇÕ ÄÄÆÛ³ÍÆ®ÀÔ´Ï´Ù. ´ÙÀ½ÀÇ ±×¸²Àº, ÀÌ ÄÁÆ®·ÑÀÇ ±×¸²ÀÔ´Ï´Ù.
ÀÌ ÄÁÆ®·ÑÀº, ´ÙÀ½ÀÇ ¼Ó¼ºÀ» °¡Áý´Ï´Ù.
- µðÆúÆ®¿¡¼´Â, TextArea ÄÁÆ®·ÑÀº ÆíÁýÇÒ ¼ö ¾ø½À´Ï´Ù.
- Button ÄÁÆ®·ÑÀ» Ŭ¸¯ÇØ, TextArea ÄÁÆ®·ÑÀÇ ÆíÁýÀ» ¹Ù²ß´Ï´Ù.
- ÄÁÆ®·ÑÀÇ
textPlacementproperties ¸¦ »ç¿ëÇØ, TextArea ¸¦ ÄÁÆ®·ÑÀÇ ¿ìÃøÀ̳ª ÁÂÃøÀ¸·Î Ç¥½Ã½Ãŵ´Ï´Ù. - ÄÁÆ®·ÑÀÇ
textPlacementproperties ¸¦ ÆíÁýÇϸé,placementChangedÀ̺¥Æ®°¡ ¼ÛÃâ(Dispatch)µË´Ï´Ù. textproperties ¸¦ »ç¿ëÇØ, ÇÁ·Î±×·¥¿¡ ÀÇÇØ TextArea ÄÁÆ®·Ñ¿¡ ³»¿ëÀ» ±âÀÔÇÕ´Ï´Ù.- ÄÁÆ®·ÑÀÇ
textproperties ¸¦ ÆíÁýÇϸé,textChangedÀ̺¥Æ®°¡ ¼ÛÃâ(Dispatch)µË´Ï´Ù. - TextArea ÄÁÆ®·Ñ³»ÀÇ ÅØ½ºÆ®¸¦ ÆíÁýÇϸé,
changeÀ̺¥Æ®°¡ ¼ÛÃâ(Dispatch)µË´Ï´Ù. textPlacementproperties ³ªtextproperties ¸¦, µ¥ÀÌÅÍ ¹ÙÀεù½ÄÀÇ ¼Ò½º·Î¼ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.- Çʿ信 µû¶ó¼, Button ÄÁÆ®·ÑÀÇ ¾÷, ´Ù¿î, ¿À¹ö »óÅÂÀÇ ½ºÅ²À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
´ÙÀ½ÀÇ MXML ÆÄÀÏÀÇ ¿¹¿¡¼´Â, ModalText ÄÁÆ®·ÑÀ» »ç¿ëÇØ textPlacement properties ¸¦ left ·Î ¼³Á¤ÇØ ÀÖ½À´Ï´Ù.
<? xml version="1. 0"? >
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:MyComp="mycomponents. *">
<MyComp:ModalText textPlacement="left"/>
</mx:Application>
´ÙÀ½ÀÇ ¿¹ÀÇ °°°Ô,placementChanged À̺¥Æ®¸¦ ó¸®ÇØ,ModalText.textPlacement properties ¸¦ º¯°æÇϴ ŸÀ̹ÖÀ» °áÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
<mx:Script>
<! [CDATA[
import flash.events.Event;
private function placementChangedListener(event:Event) :void {
myEvent.text="placementChanged event occurred. ";
}
]]>
</mx:Script>
<MyComp:ModalText textPlacement="left"
placementChanged="placementChangedListener(event) ;"/>
<mx:TextArea id="myEvent"/>
´ÙÀ½ÀÇ ¿¹´Â, ÀÌ ÄÁÆ®·ÑÀ» Á¤ÀÇÇϰí ÀÖ´Â "ModalText.as" ÆÄÀÏÀÔ´Ï´Ù.
package myComponents
{
// ÇÊ¿äÇÑ Å¬·¡½º¸¦ ¸ðµÎ ÀоîµéÀδÙ
import mx.core.UIComponent;
import mx.controls.Button;
import mx.controls.TextArea;
import flash.events.Event;
import flash.text.TextLineMetrics;
// ModalText ´Â, ÀÚ½Ä (child) TextArea ÄÁÆ®·ÑÀÇ ÅØ½ºÆ®°¡ º¯°æµÇ¾úÀ» ¶§¿¡
// change À̺¥Æ®¸¦ ¼ÛÃâ(Dispatch), ModalText ÀÇ ÅØ½ºÆ® properties °¡
// ¼³Á¤µÇ¾úÀ» ¶§¿¡ textChanged À̺¥Æ®¸¦ ¼ÛÃâ(Dispatch), ModalText ÀÇ textPlacement properties °¡
// º¯°æµÇ¾úÀ» ¶§¿¡ placementChanged À̺¥Æ®¸¦ ¼ÛÃâ(Dispatch)ÇÑ´Ù
[Event(name="change", type="flash.events.Event")]
[Event(name="textChanged", type="flash.events.Event")]
[Event(name="placementChanged", type="flash.events.Event")]
/*** UIComponent ¸¦ È®ÀåÇÑ´Ù ***/
public class ModalText extends UIComponent {
/*** class constructor¡¡ ¡¡ À» ±¸ÇöÇÑ´Ù ***/
public function ModalText() {
super();
}
/*** 2 »ìÀÇ ÀÚ½Ä (child) ÄÄÆÛ³ÍÆ®ÀÇ º¯¼ö¸¦ Á¤ÀÇÇÑ´Ù ***/
// ÄÄÆÛ³ÍÆ®ÀÇ ¾ÆÀÌÀÇ 2 »ìÀÇ º¯¼ö¸¦ ¼±¾ðÇÑ´Ù
private var text_mc:TextArea;
private var mode_mc:Button;
/*** Button ÄÄÆÛ³ÍÆ®°¡ »ç¿ëÇÏ´Â »õ·Î¿î ½ºÅ²À» Æ÷ÇÔÇϴ´٠***/
// ModalUpSkin, ModalOverSkin, ModalDownSkinYou ¶ó´Â À̸§ÀÇ ½Éº¼À» Æ÷ÇÔÇÑ´Ù
// SWF ÆÄÀÏÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù
// ½ºÅ²ÀÌ ¾ø´Â °æ¿ì´Â, ´ÙÀ½À¸·ÎºÎÅÍÀÇ ÇàÀ» comment out ÇÑ´Ù
[Embed(source="Modal2.swf", symbol="upskin")]
public var modeUpSkinName:Class;
[Embed(source="Modal2.swf", symbol="overskin")]
public var modeOverSkinName:Class;
[Embed(source="Modal2.swf", symbol="downskin")]
public var modeDownSkinName:Class;
/*** createChildren() ¸Þ¼Òµå¸¦ ±¸ÇöÇÑ´Ù ***/
// ¾ÆÀ̸¦ ÀÛ¼ºÇϱâ Àü¿¡, ¾ÆÀ̰¡ Á¸ÀçÇÒÁö ¾î¶³Áö¸¦ Å×½ºÆ®ÇÑ´Ù
// À̰ÍÀº Çʼö´Â ¾Æ´ÏÁö¸¸, ¼ºê Ŭ·¡½º°¡ ´Ù¸¥ ¾ÆÀ̸¦
// ÀÛ¼ºÇÒ ¼ö ÀÖµµ·Ï(µíÀÌ) È®ÀÎÇÑ´Ù
override protected function createChildren() :void {
super.createChildren();
// TextArea ÄÁÆ®·ÑÀ» ÀÛ¼ºÇØ, ÃʱâÈÇÑ´Ù
if (! text_mc) {
text_mc = new TextArea();
text_mc.explicitWidth = 80;
text_mc.editable = false;
text_mc.text= _text;
text_mc.addEventListener("change", handleChangeEvent);
addChild(text_mc);
}
// Button ÄÁÆ®·ÑÀ» ÀÛ¼ºÇØ, ÃʱâÈÇÑ´Ù
if (! mode_mc) {
mode_mc = new Button();
mode_mc.label = "Toggle Editing Mode";
// ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ½ºÅ²ÀÌ ¾ø´Â °æ¿ì´Â, ´ÙÀ½À¸·ÎºÎÅÍÀÇ ÇàÀ» comment out ÇÑ´Ù
mode_mc.setStyle('overSkin', modeOverSkinName);
mode_mc.setStyle('upSkin', modeUpSkinName);
mode_mc.setStyle('downSkin', modeDownSkinName);
mode_mc.addEventListener("click", handleClickEvent);
addChild(mode_mc);
}
}
/*** commitProperties() ¸Þ¼Òµå¸¦ ±¸ÇöÇÑ´Ù ***/
override protected function commitProperties() :void {
super.commitProperties();
if (bTextChanged) {
bTextChanged = false;
text_mc.text = _text;
invalidateDisplayList();
}
}
/*** measure() ¸Þ¼Òµå¸¦ ±¸ÇöÇÑ´Ù ***/
// µðÆúÆ®ÀÇ ÆøÀº ÅØ½ºÆ®¿Í ¹öưÀÇ Å©±â
// ³ôÀÌ´Â ¹öư¿¡ ÀÇÇØ Á¤ÇØÁø´Ù
override protected function measure() :void {
super.measure();
// Button ÄÁÆ®·ÑÀº ½ºÅ²À» »ç¿ëÇϹǷÎ,
// Button ÄÁÆ®·ÑÀÇ ÃøÁ¤ Å©±â¸¦ ÃëµæÇÑ´Ù
var buttonWidth:Number = mode_mc.getExplicitOrMeasuredWidth();
var buttonHeight:Number = mode_mc.getExplicitOrMeasuredHeight();
// µðÆúÆ®Æø°ú ÃÖ¼ÒÆøÀº, TextArea ÄÁÆ®·ÑÀÇ
// measuredWidth + Button ÄÁÆ®·ÑÀÇ
// measuredWidth
measuredWidth = measuredMinWidth = text_mc.measuredWidth +
buttonWidth;
// µðÆúÆ® ³ôÀÌ¿Í ÃÖ¼Ò ³ôÀÌ´Â, TextArea ÄÁÆ®·ÑÀÇ ³ôÀÌÀΰ¡
// Button ÄÁÆ®·ÑÀÇ measuredWidth ÀÇ ÃÄ Å« Æí
// + ÅØ½ºÆ®ÀÇ ÁÖÀ§ÀÇ 10 Çȼ¿ÀÇ °æ°è¼±
measuredHeight = measuredMinHeight =
Math.max(mode_mc.measuredHeight, buttonHeight) + 10;
}
/*** updateDisplayList() ¸Þ¼Òµå¸¦ ±¸ÇöÇÑ´Ù ***/
// Button ÄÁÆ®·ÑÀ», label ÅØ½ºÆ®ÀÇ Å©±â
// + 10 Çȼ¿ÀÇ °æ°è¼± area·Î ¼³Á¤ÇÑ´Ù
// TextArea ÀÇ Å©±â¸¦, ÄÄÆÛ³ÍÆ®ÀÇ ³ª¸ÓÁöÀÇ area·Î ¼³Á¤ÇÑ´Ù
// textPlacement properties ÀÇ ¼³Á¤¿¡ ±Ù°ÅÇØ
// ¾ÆÀ̸¦ ¹èÄ¡ÇÑ´Ù
override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number) :void {
super.updateDisplayList(unscaledWidth, unscaledHeight);
// Á¿ìÀÇ °æ°è¼±¿ëÀ¸·Î 1 Çȼ¿À» ´ç°Ü,
// Á¿쿡 3 Çȼ¿ÀÇ ¸¶ÁøÀ» »ç¿ëÇÑ´Ù
var usableWidth:Number = unscaledWidth - 8;
// »óÇÏÀÇ °æ°è¼±¿ëÀ¸·Î 1 Çȼ¿À» ´ç°Ü,
// »óÇÏ¿¡ 3 Çȼ¿ÀÇ ¸¶ÁøÀ» »ç¿ëÇÑ´Ù
var usableHeight:Number = unscaledHeight - 8;
// Button ÄÁÆ®·ÑÀÇ Å©±â¸¦ ÅØ½ºÆ®¿¡ ±Ù°ÅÇØ °è»êÇÑ´Ù
var lineMetrics:TextLineMetrics = measureText(mode_mc.label);
// 10 Çȼ¿ÀÇ °æ°è¼± area¸¦ ÅØ½ºÆ®ÀÇ ÁÖÀ§¿¡ Ãß°¡ÇÑ´Ù
var buttonWidth:Number = lineMetrics.width + 10;
var buttonHeight:Number = lineMetrics.height + 10;
mode_mc.setActualSize(buttonWidth, buttonHeight);
// ÅØ½ºÆ®ÀÇ Å©±â¸¦ °è»êÇÑ´Ù
// Button ÄÁÆ®·Ñ°ú TextArea ÄÁÆ®·ÑÀÇ °£°ÝÀ»
// 5 Çȼ¿·Î ÇÑ´Ù
var textWidth:Number = usableWidth - buttonWidth - 5;
var textHeight:Number = usableHeight;
text_mc.setActualSize(textWidth, textHeight);
// textPlacement properties ¿¡ ±Ù°ÅÇØ ÄÁÆ®·ÑÀ» ¹èÄ¡ÇÑ´Ù
if (textPlacement == "left") {
text_mc.move(4, 4);
mode_mc.move(4 + textWidth + 5, 4);
}
else {
mode_mc.move(4, 4);
text_mc.move(4 + buttonWidth + 5, 4);
}
// ÀÚ½Ä (child) ÄÄÆÛ³ÍÆ®ÀÇ ÁÖÀ§¿¡ ´Ü¼øÇÑ °æ°è¼±À» ¹¦È ÇÑ´Ù
graphics.lineStyle(1, 0x000000, 1.0);
graphics.drawRect(0, 0, unscaledWidth, unscaledHeight);
}
/*** ¸Þ¼Òµå, properties , metadata¸¦ Ãß°¡ÇÑ´Ù ***/
// properties ÀÇ ÀϹÝÀûÀÎ ÆÐÅÏ¿¡ µû¶ó, »çÀûÀÎ
// Ȧ´õ º¯¼ö¸¦ ÁöÁ¤ÇÑ´Ù
private var _textPlacement:String = "left";
// textPlacement properties ÀÇ getter/setter ÀÇ Æä¾î¸¦ ÀÛ¼ºÇÑ´Ù
public function set textPlacement(p:String) :void {
_textPlacement = p;
invalidateDisplayList();
dispatchEvent(new Event("placementChanged"));
}
// textPlacement properties ·Î µ¥ÀÌÅÍ ¹ÙÀεùÀ» Áö¿ø(support)ÇÑ´Ù
[Bindable(event="placementChanged")]
public function get textPlacement() :String {
return _textPlacement;
}
private var _text:String = "ModalText";
private var bTextChanged:Boolean = false;
// text properties ÀÇ getter/setter ÀÇ Æä¾î¸¦ ÀÛ¼ºÇÑ´Ù
public function set text(t:String) :void {
_text = t;
bTextChanged = true;
invalidateProperties();
dispatchEvent(new Event("textChanged"));
}
[Bindable(event="textChanged")]
public function get text() :String {
return text_mc.text;
}
// ¾ÆÀÌ¿¡ ÀÇÇØ ¼ÛÃâ(Dispatch)µÈ À̺¥Æ®¸¦ ó¸®ÇÑ´Ù
private function handleChangeEvent(eventObj:Event) :void {
dispatchEvent(new Event("change"));
}
// ¾ÆÀÌ¿¡ ÀÇÇØ ¼ÛÃâ(Dispatch)µÈ À̺¥Æ®¸¦ ó¸®ÇÑ´Ù
private function handleClickEvent(eventObj:Event) :void {
text_mc.editable = ! text_mc.editable;
}
}
}
