'FLEX'에 해당되는 글 48건

  1. 2010.07.12 [FLEX 3.0] - 열려 있는 창이 있다면 한번에 닫고 새로운 창 열기
  2. 2010.07.12 [Flex 3.0] Adobe Flex3 실전 트레이닝북 동영상 - LESSON 10: 액션스크립트 3.0으로 사용자 정의 컴포넌트 만들기
  3. 2010.07.12 [Flex3.0 - Chart] AreaChart에 style 적용하고 categoryAxis 재 정의 하기
  4. 2010.07.12 Flex - httpService의 return값을 계층형 데이터 구조로 받기(httpService / XMLList)
  5. 2010.07.12 Flex3.0 - AS3.0으로 AdvancedDataGridColumn에 itemRenderer사용하기 및 특정 데이터 넘기기 - ClassFactory & properties
  6. 2010.07.12 [Flex 3.0] Adobe Flex3 실전 트레이닝북 동영상 - LESSON 9: 사용자 정의 이벤트 사용하기
  7. 2010.07.12 [Flex 3.0] Adobe Flex3 실전 트레이닝북 동영상 - LESSON 8: 데이터셋을 컨트롤과 Repeater에서 사용하기
  8. 2010.07.12 [Flex 3.0] Adobe Flex3 실전 트레이닝북 동영상 - LESSON 7: MXML로 컴포넌트 만들기
  9. 2010.07.12 [Flex 3.0] Adobe Flex3 실전 트레이닝북 동영상 - LESSON 6: 컨트롤에서 리모트 XML 데이터 사용하기
  10. 2010.07.12 [Flex 3.0] Adobe Flex3 실전 트레이닝북 동영상 - LESSON 5: 이벤트 핸들링과 데이터 구조

[FLEX 3.0] - 열려 있는 창이 있다면 한번에 닫고 새로운 창 열기

FLEX/FLEX 2010. 7. 12. 22:01

정말 오랜만에 블러그에 글을 등록하네요.. 요즘 너무 너무 정신이 없어서리... 에휴(핑계..ㅎㅎ)

이번에 새로운 구조로 작업을 하다보니 기존에 만들어 놓았던 창이 열려있으면 다시 못열게 하기 값만 바꾸기 이런게 하나도 되지 않아서 새로운 스크립트 방식으로 작업을 진행해 보았다.

이 구조는 정말 내가 멍청해서 그런지 새로운 창이 열려 있으면 열린 창에 전혀 엑세스를 할수가 없어서 다른 방식을 사용해 보았다.

기존에 창이 몇개가 열려 있더라도 모두 닫아 버리고 새로운 창을 여는 방식이다.
예제를 만들면서 정말 모든 소스를 정리해 버렸더니 정말 간단하다..ㅠㅠ. 왜 이리 삽질을 한거지.. 에휴..

정말 중요한건 저 빨간 소스 3줄이다. 뭐 구지 설명이라고 할것도 없네..

------------------------------------------------------------
popUpTest.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
 
 <mx:Script>
  <![CDATA[
   import mx.core.UIComponent;
  
   import mx.managers.PopUpManager;
   import mx.core.IFlexDisplayObject;
   
   private function onCreatePopup():void
   {
    var pop:PopupTitle = PopupTitle(PopUpManager.createPopUp(this, PopupTitle, false));
    pop.title = "Popup window";
    PopUpManager.centerPopUp(pop);
   }
   
   private function onCreateClosePopup():void
   {
    this.onClosePopup();
    
    var pop:PopupTitle = PopupTitle(PopUpManager.createPopUp(this, PopupTitle, false));
    pop.title = "New Popup Window";
    PopUpManager.centerPopUp(pop);
    
   }
   
   private function onClosePopup():void
   {
    for(var i:int = 0; i < systemManager.numChildren; i++)
    {
     if(systemManager.getChildAt(i) is UIComponent && UIComponent(systemManager.getChildAt(i)).isPopUp)
     {
      PopUpManager.removePopUp(IFlexDisplayObject(systemManager.getChildAt(i--)));
     }
    }
   }
   
  ]]>
 </mx:Script>
  
 <mx:Style>
  .btnStyle {
   fontSize:11;
  }
 </mx:Style>
 
 <mx:ApplicationControlBar dock="true" width="100%" height="50">
  <mx:HBox width="100%" paddingLeft="0" paddingTop="0" paddingRight="0" paddingBottom="0" horizontalGap="4">
   <mx:Button label="새로운 창 열기" styleName="btnStyle" click="onCreatePopup()"/>
   <mx:Button label="모든 창 닫고 새로운 창 열기" styleName="btnStyle" click="onCreateClosePopup()" />
   <mx:Button label="모든 창 닫기"  styleName="btnStyle" click="onClosePopup();"/>
  </mx:HBox>
 </mx:ApplicationControlBar>
 
</mx:Application>

-----------------------------------------------------------
PopupTitle.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300"
 showCloseButton="true" close="PopUpManager.removePopUp(this)">
 
 <mx:Script>
  <![CDATA[
   import mx.managers.PopUpManager;
  ]]>
 </mx:Script>
 
 <mx:Label text="새로운 창이 띄워졌어요.. 몇번째 인지.." fontSize="11"/>
 
</mx:TitleWindow>

-------------------------------------------------------------------------
혹시 저 처럼 Flash위에 Flash파일을 올려놓은 다중 구조에서 작업은 하는 사람은 위에 스크립트가 동작 하지 않을수도 있습니다.
저 역시 위에 스크립트는 해당 프로젝트에서 작동하지 않는군요. 그럴경우는 아래 스크립트로 변경...

   private function onClosePopup():void
   {
    var sysManager:SystemManager = Application.application.parent as SystemManager;
    
    for(var i:int = 0; i < sysManager.numChildren; i++)
    {
     if(sysManager.getChildAt(i) is UIComponent && UIComponent(sysManager.getChildAt(i)).isPopUp)
     {
      PopUpManager.removePopUp( IFlexDisplayObject( sysManager.getChildAt(i--) ) );
     }
    }
   }

-------------------------------------------------------------------------



:

[Flex 3.0] Adobe Flex3 실전 트레이닝북 동영상 - LESSON 10: 액션스크립트 3.0으로 사용자 정의 컴포넌트 만들기

FLEX/Adobe Flex3 실전 트레이닝북 2010. 7. 12. 22:00

  • LESSON 10: 액션스크립트 3.0으로 사용자 정의 컴포넌트 만들기
  • :

    [Flex3.0 - Chart] AreaChart에 style 적용하고 categoryAxis 재 정의 하기

    FLEX/FLEX 2010. 7. 12. 22:00

    요즘 주로 하고 있는 chart에 대해서...ㅋㅋ

    flex 기본 chart도 깔끔한 형태에 모습이 나온다 그런데 만들다보던 전체적인 chart에 대한 변화가 필요하다.
    그래서 기본 chart에다가 style을 적용하고 categoryAxis를 재 정의 해 보았다.

    categoryAxis를 재정의하는 이유는 여러 가지가 있겠지만 그중에서도 아마 많은 양의 데이터로 챠트를 구하다 보면
    x축이 너무 지저분하게 보이는데 그것을 깔끔하게 보이기 위해서..ㅎㅎ (나만의 생각인가)

    예제를 만들다 보니 새로만든 ReCategoryAxis.as파일이 너무 무식하게 작성되었다..ㅎㅎ
    이건 필요한사람이 알아서.. 여기서는 어떻게 사용하는지에 대해서만..ㅋㅋ

    -----------------------------------------------------------------------
    Main.mxml

    <?xml version="1.0"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
     backgroundColor="#FFFFFF" backgroundAlpha="0" xmlns:local="*" creationComplete="initApp();">
     
     <mx:Script>
      <![CDATA[
       import mx.rpc.events.FaultEvent;
       import mx.rpc.events.ResultEvent;
       import mx.collections.ArrayCollection;
       import mx.controls.Alert;
       
       /// httpservice를 사용하여 리턴받은 데이터를 저장할곳....
       private var arcResult:ArrayCollection = new ArrayCollection();
       
       /// creationComplete에 직접 search.send()를 사용해도 되나 추후
       /// 추가 작업이나 데이터 초기화등 여러가지 호출될것이 있을수 있으므로 initApp()를 호출한다.
       private function initApp():void
       {
        search.send();
       }
       
       /// 정상적인 result event가 넘어 왔을때 처리하는 handler
       private function onResultHandler(event:ResultEvent):void
       {
        arcResult = new ArrayCollection();
        
        /// httpservice에서 리턴되는 데이터를 arcResult에 담는다. 구지 arrayCollection()으로 감쌓지 않아도 되나
        /// 보기 편하기 위해서...
        arcResult = ArrayCollection(event.result.data.value);
        
        /// 리턴되는 데이터가 있다면 실제 chart에 binding 시키자.
        if(arcResult && arcResult.length > 0)
        {
         chartBindData(); 
        }
       }
       
       /// httpservice가 fault event가 넘어올때 처리 handler
       private function onFaultHandler(event:FaultEvent):void
       {
        Alert.show("Fail Message=>" + event.fault.toString()); 
       }
       
       private function chartBindData():void
       {
        areaChtNew.dataProvider = arcResult;
        areaChtOrigin.dataProvider = arcResult;
        
        if(arcResult && arcResult.length)
         axisID.baseCount = Number(arcResult.length/10);
       }
       
      ]]>
     </mx:Script>
     
     <mx:Style>
      .areaChartStyle {
       horizontalAxisStyleName:chartStyle;
       verticalAxisStyleName:chartStyle;
      }
      
      .chartStyle {
       tickPlacement:outside;
       tickLength:4.0;
       fontFamily:Arial;
       fontSize:9;
       fontWeight:bold;
       color:#4e4e4e;
      }
      
      
     </mx:Style>

     <mx:HTTPService id="search" method="POST" url="http://www.riamx.com/blog/20090511/data.php"
      result="onResultHandler(event);" fault="onFaultHandler(event);" />
     
     <mx:VBox width="600" height="300" borderColor="#cbcbcb" borderStyle="solid" horizontalAlign="center">
      <mx:Label text="Style 적용 차트" fontSize="11" color="0xe20000"/>
      <mx:AreaChart id="areaChtNew" width="100%" height="100%" paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10"
       styleName="areaChartStyle" showDataTips="true">

       <mx:horizontalAxis>
        <local:ReCategoryAxis id="axisID" categoryField="xValue"/>
       </mx:horizontalAxis>
       
       <mx:series>
        <mx:AreaSeries yField="yValue">
         <mx:areaFill>
          <mx:LinearGradient angle="90">
           <mx:entries>
            <mx:GradientEntry color="0x183771"/>
            <mx:GradientEntry color="0x8fabdf"/>
           </mx:entries>
          </mx:LinearGradient>
         </mx:areaFill>
        </mx:AreaSeries> 
       </mx:series>
       
       <mx:backgroundElements>
        <mx:HBox width="100%" height="100%"  borderStyle="solid" borderColor="#dedddd" backgroundColor="0xffffff" borderThickness="1"/> 
        
        <mx:GridLines direction="horizontal">
         <mx:horizontalStroke>
          <mx:Stroke color="#efefef"/>
         </mx:horizontalStroke>
        </mx:GridLines>
       </mx:backgroundElements>
          
      </mx:AreaChart>
     </mx:VBox>
     
     <mx:VBox width="600" height="300" borderColor="#cbcbcb" borderStyle="solid" horizontalAlign="center">
      <mx:Label text="Style 미적용 차트" fontSize="11" color="0xe20000" />
      <mx:AreaChart id="areaChtOrigin" width="100%" height="100%" paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10">
      
       <mx:horizontalAxis>
        <mx:CategoryAxis categoryField="xValue"/>
       </mx:horizontalAxis>
       
       <mx:series>
        <mx:AreaSeries yField="yValue" />
       </mx:series>   
       
      </mx:AreaChart>
     </mx:VBox>

    </mx:Application>

    ------------------------------
    ReCategoryAxis.as

    package
    {
     import mx.charts.AxisLabel;
     import mx.charts.CategoryAxis;
     import mx.charts.chartClasses.AxisLabelSet;
     
     public class ReCategoryAxis extends CategoryAxis
     {
      [Bindable]
      public var baseCount:int;
      
      public override function getLabelEstimate():AxisLabelSet
      {
       var preResult:AxisLabelSet = super.getLabelEstimate();
       var labels:Array = [];
       var ticks:Array = [];
       var oldLabelIndex:int = 0;
       var newLabelIndex:int = 0;
       
       
       for(oldLabelIndex = 0; oldLabelIndex < preResult.labels.length; oldLabelIndex++)
       {
        var label:AxisLabel = preResult.labels[oldLabelIndex];
        var tempValue:int = new int(label.text);
        
        if(oldLabelIndex == 0 || (tempValue%baseCount) == 0)
        {
         labels[newLabelIndex] = label;
         ticks[newLabelIndex] = preResult.ticks[oldLabelIndex];
         newLabelIndex++;
        }
       }
       
       var result:AxisLabelSet = new AxisLabelSet();
       result.labels = labels;
       result.minorTicks = null;
       result.ticks = ticks;
       result.accurate = true;
       return result;
      }
     }
    }





    위와 같이 chart에 style 적용한것과 적용하지 않을것을 보면 왜 style을 적용해야되는지 잘 비교된다.
    기본적인 차트 색은 오랜지색인데 여기에다가 gradient를 적용하여 2가지 색을 넣어보았다.

    그리고 x축을 보면 데이터를 100개 binding 했더니 알아보지도 못하게 나오는데 이것은 categoryAxis를
    재정의 하여 10단위 일때만 나타나게 변경했다.
    :

    Flex - httpService의 return값을 계층형 데이터 구조로 받기(httpService / XMLList)

    FLEX/FLEX 2010. 7. 12. 21:56

    데이터 연동 과정에서 가장 많이 사용하는것이 httpservice와 ArrayCollection항목일것이다.

    그런데 가끔 사용하다보면 데이터를 계층형 형태로 보내고 있는데 tree 메뉴 값 같이..

    그때마나 xmllist형태로 바꾸는 귀찮은 과정을 거치게 된다. 구지 xmllist형태를 쓰지 않아도 되지만

    그래서 httpservice를 그냥 xmllist형태로 받으면 되지 않을까 생각 했다.

    작업은 간단하게 진행되었다. 이론에 충실하다면.. 나도 동영상 강의를 보다가 알았다..ㅎㅎ


    기본적인 httpservice의 return 값 형태는 arrayCollection형태이다.

    그런데 tree메뉴같은 메뉴를 구성할때 xmllist로 받아서 구성하면 편리하다. 그래서 어떻게 할까 고민하다가
    함수를 만들어 사용해도 되지만 구지 그럴필요는 없을것 같다. 그냥 httpservice를 xmllist형태로 받으면 되
    지 않을까..ㅎㅎㅎ 그럼 될거 같다..ㅋㅋ


    --------------------------------------------------------------------------------------

    기본적으로 httpservice를 사용할때 resultFormat="e4x"형태로 해준다.
    그리고 e4x형태로 리턴 받을때 중요한것이 ResultEvent의 event depth가 될것이다.

    <?xml version="1.0" encoding="utf-8" ?>
    <data>
     <menu name="Menu1" menuID="1">
      <item name="Menu1 Sub1" menuID="1_1" />
      <item name="Menu1 Sub2" menuID="1_2" />
     </menu>
     <menu name="Menu2" menuID="2">
      <item name="Menu2 Sub1" menuID="2_1" />
      <item name="Menu2 Sub2" menuID="2_2" />
     </menu>
     <menu name="Menu3" menuID="3">
      <item name="Menu3 Sub1" menuID="3_1" />
      <item name="Menu3 Sub2" menuID="3_2" />
      <item name="Menu3 Sub3" menuID="3_3" />
     </menu>
    </data>


    위와 같이 데이터가 리턴될경우 return 받을때 arrayCollection으로 리턴을 받았다면 ResultEvent의 위치는
    data = event.result.data.menu가 될것이다.

    하지만 resultFormat을 e4x형태로 해주고 return 받을때는
    data = event.result.menu로 변경해주어야 된다.

    리턴되는 데이터의 root depth가 변경된다. 이걸 정확히 확인 할려면 아래와 같이 놓고 테스트를 해보면 쉽게 알수 있다.

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
     backgroundColor="#FFFFFF" creationComplete="initApp();">
     
     <mx:Script>
      <![CDATA[
       import mx.collections.ArrayCollection;
       import mx.rpc.events.ResultEvent;
       
       [Bindable]
       private var arrResult:XMLList;
       
       private function initApp():void
       {
        xmlData.send();
       }   
       
       public function xmlDataHandler(event:ResultEvent):void
       {
        arrResult = event.result.data.menu;
        
        menuTree.dataProvider = arrResult;
        
       }
       
      ]]>
     </mx:Script>
     
     <mx:HTTPService id="xmlData" url="http://pds13.egloos.com/pds/200904/24/99/BlogData1.xml" result="xmlDataHandler(event);" resultFormat="e4x" />

     <mx:Tree id="menuTree" width="300" height="100%" labelField="@name"/>

     
    </mx:Application>

    위와 같이 사용했다면 아무런 값도 tree에 바인딩 되지 않을것이 아마 하얀 화면만 나타날것이다.

    위에 소스에서 arrResult = event.result.menu로 변경을 하고 실행해본다면 return 되는 데이터가 정확히 tree에 바인딩 되는것을 알수 있다.



    BlogData1.xml

    HttpService_xmllist.swf
    :

    Flex3.0 - AS3.0으로 AdvancedDataGridColumn에 itemRenderer사용하기 및 특정 데이터 넘기기 - ClassFactory & properties

    FLEX/FLEX 2010. 7. 12. 21:55

    AS3.0로 advancedDataGrid를 구성하고 itemRenderer를 구성해보자..

    as로 advancedDataGrid를 구성하는것은 이전 블러그 글에 이미 올려져있는 사항이다..

    그런데 요즘 작업 하다가 datagrid 데이터에 특정 값을 넘겨 itemRenderer를 구성하는 작업을 하다가 정말 단순하지만 어떻게 datagrid데이터 말고 다른값을 itemRenderer한데 넘길까 한참을 고민 했었다.. 생각하면 정말 단순한것이지만..ㅎㅎ

    작업 소스를 전부 올리지는 못하니까 간단한 예제 형식으로 변경하여 블러그에 고고씽~~

    예제 파일은 단순히 모든 itemrenderer에 데이터 값이 적용되었지만 특정항목에 classFactory와 properties를 사용해서 특정값만을 줄수 있다.

    예제 파일을 올려놓고 보니까 너무 대충 만들었다.ㅋㅋ 그래도 이해를..ㅎㅎ

    --------------------------------------------------------------------------------

    BlogEx.mxml

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">
     
     <mx:Script>
      <![CDATA[
       import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
       import mx.controls.advancedDataGridClasses.AdvancedDataGridColumnGroup;
       import mx.controls.AdvancedDataGrid;
       import itemRenderer.DataGridRenderer;
       
       import mx.collections.ArrayCollection;
       
       private var dataArr:ArrayCollection = new ArrayCollection([
              {no:"1", title:"title1", imagePath:"http://pds12.egloos.com/pds/200904/20/99/access.png"},
              {no:"2", title:"title2", imagePath:""},
              {no:"3", title:"title3", imagePath:"http://pds11.egloos.com/pds/200904/20/99/cache.png"},
              {no:"4", title:"title3", imagePath:"http://pds12.egloos.com/pds/200904/20/99/kmenu2.png"}
              ]);
              
       private function initApp():void
       {
        var adGrid:AdvancedDataGrid = new AdvancedDataGrid();
        var adGridColGroup:AdvancedDataGridColumnGroup = new AdvancedDataGridColumnGroup();
        
        var col1:AdvancedDataGridColumn = new AdvancedDataGridColumn("col1");
        col1.dataField = "no";
        col1.headerText = "NO";
        
        var col2:AdvancedDataGridColumn = new AdvancedDataGridColumn("col2");
        col2.dataField = "title";
        col2.headerText = "Title";
        
        var col3:AdvancedDataGridColumn = new AdvancedDataGridColumn("col3");
        col3.dataField = "imagePath";
        col3.headerText = "ImagePath";
        
        var render:ClassFactory = new ClassFactory(itemRenderer.DataGridRenderer);
        render.properties = {valueData:"merong~~~~"};

        
        col3.itemRenderer = render;
        
        adGridColGroup.children = [col1, col2, col3];
        
        adGrid.groupedColumns = [adGridColGroup];
        
        adGrid.dataProvider = dataArr;
        adGrid.percentWidth = 90;
        adGrid.percentHeight = 100;
        adGrid.variableRowHeight = true;
        
        this.addChild(adGrid);
       }       
              
      ]]>
     </mx:Script>
     
    </mx:Application>

    ------------------------------------------------------------------------
    itemRenderer/DataGridRenderer.as

    package itemRenderer
    {
     import mx.containers.HBox;
     import mx.controls.Image;
     import mx.controls.Text;
     
     public class DataGridRenderer extends HBox
     {
      private var hbx:HBox;
      private var _image:Image;
      private var _valueData:String;
      private var _text:Text;
      
      public function DataGridRenderer()
      {
       super();
       hbx = new HBox();
       hbx.percentWidth = 100;
       hbx.setStyle("horizontalAlign","center");
       hbx.setStyle("height","300");
       _image = new Image();
       _text = new Text();
       
      }
      
      public function set valueData(value:String):void
      {
       this._valueData = value; 
      }
      
      public function get valueData():String
      {
       return _valueData;
      }

      
      override public function set data(value:Object):void
      {
       super.data = value;
       
       if(super.data["imagePath"] != undefined && super.data["imagePath"] != null && super.data["imagePath"] != "")
       {
        this.removeAllChildren();
        _image.source = super.data["imagePath"];
        _text.text = _valueData;
        
        addChild(_image);
        addChild(_text);
       } else {
        this.removeAllChildren();
        _text.text = _valueData;
        addChild(_text);
       }
      }
     }
    }

    기본 구성을 advancedDataGridColumn에 classFactory를 itemrenderer로 추가 시키는 방식을 사용했고.
    classFactory에 properties속성을 사용하여 DataGridRenderer.as get / set으로 처리..
    그리 어렵지 않은 소스라 이만. 슝~~



    :

    [Flex 3.0] Adobe Flex3 실전 트레이닝북 동영상 - LESSON 9: 사용자 정의 이벤트 사용하기

    FLEX/Adobe Flex3 실전 트레이닝북 2010. 7. 12. 21:52

  • LESSON 9: 사용자 정의 이벤트 사용하기
  • :

    [Flex 3.0] Adobe Flex3 실전 트레이닝북 동영상 - LESSON 8: 데이터셋을 컨트롤과 Repeater에서 사용하기

    FLEX/Adobe Flex3 실전 트레이닝북 2010. 7. 12. 21:52

  • LESSON 8: 데이터셋을 컨트롤과 Repeater에서 사용하기 
  • :

    [Flex 3.0] Adobe Flex3 실전 트레이닝북 동영상 - LESSON 7: MXML로 컴포넌트 만들기

    FLEX/Adobe Flex3 실전 트레이닝북 2010. 7. 12. 21:52

  • LESSON 7: MXML로 컴포넌트 만들기
  • :

    [Flex 3.0] Adobe Flex3 실전 트레이닝북 동영상 - LESSON 6: 컨트롤에서 리모트 XML 데이터 사용하기

    FLEX/Adobe Flex3 실전 트레이닝북 2010. 7. 12. 21:51

  • LESSON 6: 컨트롤에서 리모트 XML 데이터 사용하기



  • :

    [Flex 3.0] Adobe Flex3 실전 트레이닝북 동영상 - LESSON 5: 이벤트 핸들링과 데이터 구조

    FLEX/Adobe Flex3 실전 트레이닝북 2010. 7. 12. 21:51

  • LESSON 5: 이벤트 핸들링과 데이터 구조

  • --------------------------------------------------------------------
    [Test1.mxml]
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
     initialize="init();">
     <mx:Script>
      <![CDATA[
       
       public function init():void
       {
        MyButton.addEventListener(MouseEvent.CLICK, clickHandler);
       }
       
       private function clickHandler(event:MouseEvent):void
       {
        myL.text = "Hello";
       }
       
      ]]>
     </mx:Script>
     
     <mx:Label x="253" y="101" text="Label" id="myL"/>
     <mx:Button x="253" y="139" label="Button" id="MyButton"/>
     <!--<mx:Button x="253" y="139" label="Button" id="MyButton" click="myL.text='okok';"/>-->

     <!-- 속성중에 번개 표시는 이벤트라는것 -->
     
     <!-- 해당 버튼에게 Event을 등록시키는 방법은 addEventListener를 사용한다. 첫번째는 이벤트명, 두번째는 이벤트를 처리하는 function명 -->
     
     <!-- 이벤트 발생 순서 : initialize 이벤트 -> init 이벤트 -> MyButton addEventListener 이벤트 -> Click 이벤트 -->
     
     <!-- 이벤트를 등록하는 3가지 방법
      1. 바로 mxml tag내에  등록하는 방법  <mx:Button click="myL.text='okok'/>
      2. script function을 작성하여 function명을 등록하는 방법 <mx:Button click='clickHandler();'/>
      3. 객체에 addEventListener를 사용하여 등록하는 방법  MyButton.addEventListener(MouseEvent.CLICK, clickHandler);
     -->
     
    </mx:Application>

    -----------------------------------------------------------------------------------------
    [Test2.mxml]
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
     creationComplete="addToTextArea('Application');">
     
     <mx:Script>
      <![CDATA[
       
       private function addToTextArea(str:String):void
       {
        ta.text = ta.text + str + "\n";
       }
       
      ]]>
     </mx:Script>
     
     <mx:HBox x="74" y="38" width="163" height="29" creationComplete="addToTextArea('HBox')">
      <mx:Label text="Label" creationComplete="addToTextArea('Label')"/>
      <mx:Button label="Button" creationComplete="addToTextArea('Button')"/>
     </mx:HBox>
     <mx:TextArea x="74" y="102" height="227" width="209" id="ta"/>
     
     <!-- creationComplete 이벤트는 제일 안쪽(child)가 먼저 발생된다. Label -> Button -> HBox -> Application순으로 발생
      creationComplete는 컴퍼넌트가 출력된 후 발생된다.
      1. 배치완료(위치확정후)
      2. 컴포넌트가 출력된후
      3. creationComplete Event 발생-->
     
     <!-- initialize 이벤트는 자식 컴포넌트가 생성완료. 자식의 속성 초기화 완료후 호출된다.
      1. 자식 컴포넌트 생성
      2. 자식의 속성 초기화 완료
      3. initialize Event 발생
      4. 배치완료(위치확정후)
      5. 컴포넌트가 출력된후
      6. creationComplete Event 발생 -->
     
     
    </mx:Application>

    ------------------------------------------------------------------------------------
    :