Flex3.0&AS3 2008. 10. 23. 18:15

Tree To ComboBox


<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" height="280" width="443">

<mx:XML id="xmlData">
<root> 
            <folder label="Stock" isBranch="true"> 
            </folder>             
            <folder label="Entertainment" isBranch="true">
                  <folder label="지상파 방송" isBranch="true" />
                  <folder label="케이블 방송" isBranch="true">
                          <Pfolder label="인천" />
                          <Pfolder label="수원" />
                  </folder>
            </folder>
           
            <folder label="Sports">
                  <Pfolder label="야구" />
                  <Pfolder label="축구" />
                  <Pfolder label="농구" />
                  <Pfolder label="배구" />
            </folder>
</root> 
</mx:XML>
 
  <mx:Script>
   <![CDATA[
    import mx.events.ListEvent;
    
    private function fnChange(e:ListEvent):void {
     var mXMLList:XMLList=tree1.dataProvider[0]..Pfolder.(@label==e.target.text);  // 콤보박스의 문구와 같은 label있는 XML를 모두 얻어낸다.
     
     if(0==mXMLList.length()){return;}
       
     tree1.expandChildrenOf( tree1.dataProvider[0], false ); // 전체 Item를 모두 닫는다.
     tree1.expandItem(mXMLList[0],true,true);// 선택된 Item를 열어준다.
    
   
     var mTempItem:XML=mXMLList.parent();   // 선택된 Item의 위쪽 Item를 모두 열어준다.
      while(null!=mTempItem){
          tree1.expandItem(mTempItem, true,true);
          mTempItem=mTempItem.parent();
      }
                    tree1.selectedItem=mXMLList[0]; // 선택 item를 조정한다.
      var idx:Number=tree1.getItemIndex( mXMLList[0]);  // 스크롤 위치를 조정한다.
      tree1.scrollToIndex(idx);
    }
    
   ]]>
  </mx:Script>   
     
<mx:Tree id="tree1" dataProvider="{xmlData}" showRoot="false" rowCount="6"  fontSize="12" labelField="@label"  width="294"  height="195"/>
<mx:ComboBox dataProvider="{xmlData..Pfolder}" labelField="@label" fontSize="12" change="fnChange(event)" />
</mx:Application>