Flex3.0&AS3 2010. 12. 20. 19:26

IME MODE


<mx:TextInput imeMode="KOREAN" />

<mx:TextInput imeMode="ALPHANUMERIC_HALF" />

 

imeMode property  

imeMode:String [read-write]

IME (입력 Methods 에디터)의 모드를 지정합니다. IME 를 사용하는 것에 의해, 유저는 중국어, 일본어, 및 한국어의 텍스트를 입력할 수 있습니다. Flex 에서는, 컨트롤에 포커스가 놓여졌을 때에, IME 가 지정된 모드로 설정해, 컨트롤로부터 포커스가 떨어졌을 때에, 원의 모드에 되돌립니다.

flash.system.IMEConversionMode 클래스에서, 이 property의 유효한 값의 정수를 정의합니다. IME 를 전혀 지정하지 않는 경우는,null 를 지정합니다.

디폴트치null.

 

ALPHANUMERIC_FULL

public static const ALPHANUMERIC_FULL:String = "ALPHANUMERIC_FULL"

string "ALPHANUMERIC_FULL". IME.conversionMode property로 사용합니다. 이 정수는, 모든 IME 로 사용합니다. 문장구조법 IMEConversionMode.ALPHANUMERIC_FULL 를 사용합니다.

See also

 

ALPHANUMERIC_HALF  

public static const ALPHANUMERIC_HALF:String = "ALPHANUMERIC_HALF"

string "ALPHANUMERIC_HALF". IME.conversionMode property로 사용합니다. 이 정수는, 모든 IME 로 사용합니다. 문장구조법 IMEConversionMode.ALPHANUMERIC_HALF 를 사용합니다.

See also

 

CHINESE  

public static const CHINESE:String = "CHINESE"

string "CHINESE". IME.conversionMode property로 사용합니다. 이 정수는, 중공에서 정식으로 쓰는 약자체?중국어 IME 와 번체자 중국어 IME 로 사용합니다. 문장구조법 IMEConversionMode.CHINESE 를 사용합니다.

See also

 

JAPANESE_HIRAGANA  

public static const JAPANESE_HIRAGANA:String = "JAPANESE_HIRAGANA"

string "JAPANESE_HIRAGANA". IME.conversionMode property로 사용합니다. 이 정수는, 일본어 IME 로 사용합니다. 문장구조법 IMEConversionMode.JAPANESE_HIRAGANA 를 사용합니다.

See also

 

JAPANESE_KATAKANA_FULL  

public static const JAPANESE_KATAKANA_FULL:String = "JAPANESE_KATAKANA_FULL"

string "JAPANESE_KATAKANA_FULL". IME.conversionMode property로 사용합니다. 이 정수는, 일본어 IME 로 사용합니다. 문장구조법 IMEConversionMode.JAPANESE_KATAKANA_FULL 를 사용합니다.

See also

 

JAPANESE_KATAKANA_HALF  

public static const JAPANESE_KATAKANA_HALF:String = "JAPANESE_KATAKANA_HALF"

string "JAPANESE_KATAKANA_HALF". IME.conversionMode property로 사용합니다. 이 정수는, 일본어 IME 로 사용합니다. 문장구조법 IMEConversionMode.JAPANESE_KATAKANA_HALF 를 사용합니다.

See also

 

KOREAN  

public static const KOREAN:String = "KOREAN"

string "KOREAN". IME.conversionMode property로 사용합니다. 이 정수는, 한국어 IME 로 사용합니다. 문장구조법 IMEConversionMode.KOREAN 를 사용합니다.

See also

 

UNKNOWN 정수  

public static const UNKNOWN:String = "UNKNOWN"

string "UNKNOWN". IME.conversionMode property의 호출에 의해 돌려주어집니다. 이 값은 설정하지 못하고, 플레이어가 현재 액티브한 IME 를 식별할 수 없는 경우에게만 돌려주어집니다. 문장구조법 IMEConversionMode.UNKNOWN 를 사용합니다.

See also

Flex3.0&AS3 2009. 7. 12. 20:11

flex3] ItemRenderer 이해 및 활용

IDataRenderer인터페이스 상속한 ItemRenderer클래스는 data속성을 받을수있다.


private var _data:Object;

[Bindable("dataChange")]

public function get data():Object{
return _data;
}

public function set data(value:Object):void{
_data = value
dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
}


IDropInListItemRenderer 인터페이스 상속한 ItemRenderer 클래스는 listData속성을 받을수있다.
private var _listData:BaseListData;

[Bindable("dataChange")]
public function get listData():BaseListData{
  return _listData;
}

public function set listData(value:BaseListData):void{
_listData = value;
dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
}




* FLEX 메뉴얼 참고


ItemRenderer컴포넌트 작성시 Container클래스 기반으로설계하는것은 IDataRenderer인터페이스를 구현하였기 때문에
data속성을 사용할수있다.



MyItemRenderer.mxml // 아이템렌더러 컴포넌트



<?xml version="1.0" encoding="utf-8"?>
<mx:Container xmlns:mx="http://www.adobe.com/2006/mxml"
 width="110" height="200"
 implements="mx.core.IDataRenderer"
 >
 <mx:Script>
  <![CDATA[
   import mx.events.FlexEvent;
   
   private var _data:Object;
   
   [Bindable("dataChange")]
   override public function get data():Object{
    return _data;
   }
   
   override public function set data(value:Object):void{
    super.data = value;
    _data = value;
    dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
   }
   
  ]]>
 </mx:Script>
 
 <mx:Label text="{data.label}:{data.index}" y="0" width="120" height="20" fontSize="12"/>
 <mx:SWFLoader id="sLoader" y="20" width="110" height="160" source="{data.url1}"/>
</mx:Container>



main.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
 layout="vertical">
 <mx:Script>
  <![CDATA[
   
  [Bindable]
  [Embed(source='asserts/17.gif')]
  private var m1:Class;
  
  [Bindable][Embed(source="asserts/18.gif")]
  private var m2:Class;
  
  [Bindable][Embed(source="asserts/19.gif")]
  private var m3:Class;
  
  private function AutoIndex(m:ArrayCollection):ArrayCollection{
   var mLen:Number = m.length;
   for(var i:Number=0; i<mLen;++i){
    m[i].index = i;
   }
   return m;
  }  
  
   
  ]]>
 </mx:Script>
 
<mx:ArrayCollection id="dpd">
    <mx:source>  
       <mx:Object label="오만과 편견" icon="{m1}" url1="http://imgmovie.naver.com/mdi/mit500/0447/D4728-00.jpg" />
       <mx:Object label="캐리비안의 해적" icon="{m2}" url1="http://imgmovie.naver.com/mdi/mit500/0436/D3679-01.jpg"/>
       <mx:Object label="러브 액츄얼리" icon="{m3}" url1="http://imgmovie.naver.com/mdi/mit500/0368/C6843-00.jpg"/>   
     </mx:source>
</mx:ArrayCollection>
<mx:List id="lData" dataProvider="{AutoIndex(dpd)}"
 width="160" itemRenderer="MyItemRenderer" rowCount="2"/>
</mx:Application>

Flex3.0&AS3 2009. 7. 12. 19:10

flex3] custom tooltip

사용자정의 툴팁



<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Script>
 <![CDATA[
  import mx.events.ToolTipEvent;
  import mx.events.ListEvent;
  import mx.collections.IList;
  import mx.controls.Alert;
  import mx.managers.DragManager;
  import mx.events.DragEvent;
  
  [Bindable]
  [Embed(source='asserts/17.gif')]
  private var m1:Class;
  
  [Bindable][Embed(source="asserts/18.gif")]
  private var m2:Class;
  
  [Bindable][Embed(source="asserts/19.gif")]
  private var m3:Class;
  
  private var mTipString:String;
  
   private function fnRollOut(event:ListEvent):void
  {
   mTipString = "";
   event.target.toolTip = mTipString;
   event.target.removeEventListener(ToolTipEvent.TOOL_TIP_CREATE,createCustomTip);
  }
  
  
    private function fnRollOver(event:ListEvent):void {
             event.target.addEventListener(ToolTipEvent.TOOL_TIP_CREATE,createCustomTip);
                 // 사용자 정의형 툴팁을 적용하기 위한 장치

             mTipString = event.itemRenderer.data.toolStr;      // 툴팁 문구를 변수에 저장한다.(item정보 얻어냄)
             event.target.toolTip = mTipString ;
            }
  
  
 
  
   private function createCustomTip(event:ToolTipEvent):void {
                 var ptt:PanelToolTip = new PanelToolTip();    //사용자 정의형 퉅팁 객체 생성
                 ptt.title = "사용자 정의 툴팁";
                 ptt.text= mTipString;                                    // 툴팁 문자열은 전송
                 event.toolTip = ptt;                                 //사용자 정의형 툴팁 객체로 지정
            }       
  
 ]]>
</mx:Script>
<mx:Style source="css/flex_css.css"/>
 <mx:ArrayCollection id="dpd">
  <mx:source>
   <mx:Object label="label1" data="data1" icon="{m1}" toolStr="Elara ToolTip1"/>
   <mx:Object label="label2" data="data1" icon="{m2}" toolStr="Elara ToolTip2"/>
   <mx:Object label="label3" data="data1" icon="{m3}" toolStr="Elara ToolTip3"/>
  </mx:source>
 </mx:ArrayCollection>

<mx:List id="lData" dataProvider="{dpd}" width="240" height="114"
 dragEnabled="true" dropEnabled="true"
 itemRollOver="fnRollOver(event)"
 itemRollOut="fnRollOut(event)"
 />
<mx:Label text="Selected label : {lData.selectedItem.label}"/>
<mx:Label text="Selected data : {lData.selectedItem.data}"/>
<mx:Image source="{lData.selectedItem.icon}"/>
</mx:Application>

Flex3.0&AS3 2009. 2. 13. 17:00

advanceddatagrid 에서 체크박스 랜더러 사용하기


datagrid 컬럼에 렌더러와 rendererIsEditor에 true으로 설정후에 랜더러 설정해주면 정상적으로 동작한다.

데이타 그리드안에 체크박스 넣을시 스크롤시에 체크박스가 비정상적으로 체크되는 현상이 발생한다.
데이타 그리드의 row인덱스값에 따라서 해당위치에 표시가 되는현상이기때문에 이런 부분을 예방하기 위해서는
체크여부와 체크박스의 위치를 기억할수있는 label을 만들어서 편법으로 만들어주었다.

이 선택여부와 label 번호를 기억(저장)되고 있는 부분이 있어야 하는데 db로부터 데이타를 받아온후에 가상으로
아래처럼 필드를 추가해주었다.

for(var i:int=0; i<main_dataList.length; i++)
    {
     main_dataList[i].IsChecked = false;
     main_dataList[i].No = i;
    }

아래처럼 for문돌면서 check여부를 확인해서 체크된녀석들만 뭔가 수행하고자하는 작업을 넣어주면 될듯함.

for(var i:int=0; i<main_dataList.length; i++)
    {
     if(main_dataList[i].IsChecked)
      trace(main_dataList[i].PPE_CONTENT+' : '+main_dataList[i].No+' : '+main_dataList[i].IsChecked);
    }


datagrid 일부..

<mx:DataGridColumn  itemRenderer="MASTER.SWF.CheckboxRenderer"     rendererIsEditor="true" />




CheckboxRenderer.mxml 렌더러파일

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="center" implements="mx.controls.listClasses.IDropInListItemRenderer">
        <mx:Script>
          <![CDATA[
           import mx.controls.Alert;
            import mx.controls.advancedDataGridClasses.AdvancedDataGridListData;
            import Dsic.Controls.DsDataGrid;
           import mx.controls.DataGrid;
           import mx.controls.dataGridClasses.DataGridListData;
           import mx.controls.listClasses.BaseListData;
  
           private var _listData:BaseListData;
           public function get listData():BaseListData {
             return _listData;
           }
           public function set listData( value:BaseListData ):void {
             _listData = value;
           }
             
           private function changeCB(evt:MouseEvent):void {
             var myListData:AdvancedDataGridListData = evt.target.parentDocument.listData;
             var myDG:DsDataGrid = DsDataGrid(myListData.owner);
             myDG.document.main_dataList[Number(no.text)].No = no.text;
             myDG.document.main_dataList[Number(no.text)].IsChecked =!data.IsChecked;
           } 
          
          
          ]]>
        </mx:Script>
       
         <mx:Text id="no" text="{data.No}" visible="true" width="0"/>
         <mx:CheckBox id="cb" selected="{data.IsChecked}" click="changeCB(event)"/>
</mx:HBox>
Flex3.0&AS3 2009. 2. 12. 15:39

플렉스 관련 사이트


플렉스 이미지 효과내는 예제 목록들
1. Setting effects with ActionScript in Flex
2. Image Manipulation in Flex
3. Rounding the corners of an Image control in Flex using a mask
http://blog.flexexamples.com/2008/09/09/rounding-the-corners-of-an-image-control-in-flex-using-a-mask/#more-792
4. Setting a complete effect on an Image control in Flex
http://blog.flexexamples.com/2008/06/29/setting-a-complete-effect-on-an-image-control-in-flex/#more-689
5. Preventing an image from automatically loading in an Image control in Flex
http://blog.flexexamples.com/2008/06/29/preventing-an-image-from-automatically-loading-in-an-image-control-in-flex/#more-688
6. Maintaining an image’s aspect ratio on an Image control in Flex
http://blog.flexexamples.com/2008/06/28/maintaining-an-images-aspect-ratio-on-an-image-control-in-flex/#more-687
7. Displaying a hand cursor when mousing over a Flex control
http://blog.flexexamples.com/2007/11/18/displaying-a-hand-cursor-when-mousing-over-a-flex-control/
8. Detecting whether an image loaded successfully in Flex
http://blog.flexexamples.com/2007/11/04/detecting-whether-an-image-loaded-successfully-in-flex/
9. Using the Image control as a pop up
http://blog.flexexamples.com/2007/10/18/using-the-image-control-as-a-pop-up/
10. Flex Quick Starts: Building a simple user interface
http://www.adobe.com/devnet/flex/quickstart/adding_effects/
11. Creating a simple image gallery with the Flex TileList control
http://blog.flexexamples.com/2008/03/08/creating-a-simple-image-gallery-with-the-flex-tilelist-control/
12. Image control -- Flex 2.01
http://livedocs.adobe.com/flex/201/html/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Book_Parts&file=controls_059_18.html
13. Skewing an Image control in Flex
14. Disabling container layout for effects
http://livedocs.adobe.com/flex/201/html/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Book_Parts&file=behaviors_068_29.html
15. Image Gallery Component - ImageRail
http://www.flexer.info/2008/05/29/image-gallery-component-imagerail/
16. ImageRail - Adding Click Event, Styles And HandCursor
http://www.flexer.info/2008/06/05/imagerail-adding-click-event-styles-and-handcursor/
17. Tips:three ways to load an image file in Flex
http://ntt.cc/2008/03/09/tips-three-ways-to-load-an-image-file-in-flex.html
18. Using the AnimateProperty effect
Flex 프로젝트명 : AnimateProperty.mxml
19. Flex CoverFlow performance improvement, Flex Carousel Component, and Vertical CoverFlow
20. 이미지 팁(flash & silverlight)
http://www.shinedraw.com/
21. Creating a simple image gallery with the Flex HorizontalList control (redux)
22. 여러가지 예제
http://blog.naver.com/rubberdam?Redirect=Log&logNo=120052663108
23. Flex Roll Over Image with link Component
24. Adding time delay to mouse over events
25. Posts Tagged ‘scroll image flex’
http://www.infuy.com/blogs/alex/?tag=scroll-image-flex
26. Mouseover and Mouseout example
27. CursorManager - Change Mouse Cursor
28. Free ImageZoomer Flex Component!
31. Roll Over Image/Button Examples
Flex3.0&AS3 2009. 2. 10. 11:51

Datagrid 안에서 itemrenderer활용 샘플





<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*"
 width="450" height="370" verticalScrollPolicy="off" horizontalScrollPolicy="off"
 backgroundColor="#FFFFFF">
    <mx:Script>
        <![CDATA[
         import comp.MultiObject;
         import mx.collections.ArrayCollection;
            [Bindable]
            public var initDG:ArrayCollection = new ArrayCollection([
             new MultiObject(1, 'Test1', 1, false),
             new MultiObject(2, 'Test2', 2, false),
             new MultiObject(3, 'Test3', 3, false),
             new MultiObject(4, 'Test4', 4, false),
             new MultiObject(5, 'Test5', 5, false),
             new MultiObject(6, 'Test6', 6, false),
             new MultiObject(7, 'Test7', 7, false),
             new MultiObject(8, 'Test8', 8, false),
             new MultiObject(9, 'Test9', 9, false),
             new MultiObject(10, 'Test10', 10, true),
             new MultiObject(11, 'Test11', 11, false),
             new MultiObject(12, 'Test12', 12, false),
             new MultiObject(13, 'Test13', 13, false),
             new MultiObject(14, 'Test14', 14, false),
             new MultiObject(15, 'Test15', 15, false),
             new MultiObject(16, 'Test16', 16, false),
             new MultiObject(17, 'Test17', 17, false),
             new MultiObject(18, 'Test18', 18, false),
             new MultiObject(19, 'Test19', 19, false),
             new MultiObject(20, 'Test20', 20, true)            
            ]);              
      [Bindable] public var isEditable:Boolean = false;
      [Bindable] public var totalData:String = "Total : ";
      [Bindable] public var test:String = "test: ";
      private function activateRadio():void {
       isEditable = true;
      }
      private function deActivateRadio():void {
       isEditable = false;      
      }
      private var flag:Boolean = false;
      public function checkAll():void {
       if(flag) {
        flag = false;
       } else {
        flag = true;
       }
       for(var idx:uint=0; idx<initDG.length; idx++) {
        initDG[idx] = new MultiObject(initDG[idx].No, initDG[idx].Name, initDG[idx].CheckNum, flag);
       }
      }
        ]]>
    </mx:Script>
    <mx:DataGrid id="myGrid" dataProvider="{initDG}" headerHeight="50" variableRowHeight="false"
     editable="true" width="450" height="300" >   
        <mx:columns>
                <mx:DataGridColumn headerText="No" dataField="No" width="30"/>
                <mx:DataGridColumn headerText="Name" dataField="Name"/>
                <mx:DataGridColumn headerText="IsChecked" dataField="IsChecked" editable="true"/>
                <mx:DataGridColumn headerText="Radio IR" dataField="IsChecked" editable="false">
         <mx:itemRenderer>
           <mx:Component>
             <mx:HBox horizontalAlign="center" implements="mx.controls.listClasses.IDropInListItemRenderer">
               <mx:Script>
                <![CDATA[
                 import mx.controls.Alert;
                import comp.MultiObject;
                import mx.controls.DataGrid;
                import mx.controls.dataGridClasses.DataGridListData;
                import mx.controls.listClasses.BaseListData;
       
                private var _listData:BaseListData;
               
                public function get listData():BaseListData {
                  return _listData;
                }
                public function set listData( value:BaseListData ):void {
                  _listData = value;
                }  
               
               
                       private function changeRDO(evt:MouseEvent):void {
                        
                         var myListData:DataGridListData = evt.target.parentDocument.listData;
                         var myDG:DataGrid = DataGrid(myListData.owner);
                         var idx:Number = Number(no.text)-1;
                         Alert.show(myDG.document.test);
                  for(var i:uint=0; i<myDG.document.initDG.length; i++) {
                    if(i == idx) {
                      myDG.document.initDG[i] = new MultiObject(myDG.document.initDG[i].No, myDG.document.initDG[i].Name,
                      myDG.document.initDG[i].CheckNum, true);           
                    }else{
                      myDG.document.initDG[i] = new MultiObject(myDG.document.initDG[i].No, myDG.document.initDG[i].Name,
                      myDG.document.initDG[i].CheckNum, false);
                    }
                  }                  
                       } 
                ]]>
               </mx:Script>
              <mx:Text id="no" text="{data.No}" visible="false" width="0"/>
              <mx:RadioButton id="rdo" selected="{data.IsChecked}" click="changeRDO(event)"/>
             </mx:HBox>
           </mx:Component>
         </mx:itemRenderer>
                </mx:DataGridColumn>
                           
             <mx:DataGridColumn dataField="IsChecked" headerText="itemEditor" editorDataField="cbSelected">
              <mx:itemEditor>
               <mx:Component>
           <mx:VBox backgroundColor="yellow" implements="mx.controls.listClasses.IDropInListItemRenderer">
              <mx:Script>
                   <![CDATA[
                    import mx.events.FlexEvent;
              import comp.MultiObject;
              import mx.controls.DataGrid;
              import mx.controls.dataGridClasses.DataGridListData;
              import mx.controls.listClasses.BaseListData;
    
              private var _listData:BaseListData;
              public function get listData():BaseListData {
                return _listData;
              }
              public function set listData( value:BaseListData ):void {
                _listData = value;
              }
                       public var cbSelected:Boolean;
                       override public function set data(value:Object):void {
                        if(value != null) {
                super.data = value;
                if (value.IsChecked == true) {
                 combo.selectedIndex = 0;
                } else {
                 combo.selectedIndex = 1;            
                }
                        }
                        dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
                       }                  
                       private function changeCombo(evt:Event):void {
                        var myListData:DataGridListData = evt.target.parentDocument.listData;
                        var myDG:DataGrid = DataGrid(myListData.owner);
                        var idx:Number = Number(no.text)-1;
               for(var i:uint=0; i<myDG.document.initDG.length; i++) {
                if(i == idx && evt.target.selectedIndex == 0) {
                 myDG.document.initDG[i] = new MultiObject(myDG.document.initDG[i].No, myDG.document.initDG[i].Name,
                  myDG.document.initDG[i].CheckNum, true);
                } else {
                 myDG.document.initDG[i] = new MultiObject(myDG.document.initDG[i].No, myDG.document.initDG[i].Name,
                  myDG.document.initDG[i].CheckNum, false);
                }
               }
                       } 
                   ]]>
               </mx:Script>
            <mx:ComboBox id="combo" change="changeCombo(event)" updateComplete="cbSelected=combo.selectedItem.data" >
             <mx:dataProvider>
              <mx:Object label="true" data="true"/>
              <mx:Object label="false" data="false"/>
             </mx:dataProvider>
            </mx:ComboBox>  
            <mx:Text id="no" text="{data.No}" visible="false" width="0"/>      
           </mx:VBox>               
               </mx:Component>
              </mx:itemEditor>
             </mx:DataGridColumn>
               
                <mx:DataGridColumn dataField="IsChecked" headerText="CheckBox IR" editable="false" rendererIsEditor="true" >
         <mx:itemRenderer>
           <mx:Component>
             <mx:HBox horizontalAlign="center" implements="mx.controls.listClasses.IDropInListItemRenderer">
               <mx:Script>
                <![CDATA[
                import comp.MultiObject;
                import mx.controls.DataGrid;
                import mx.controls.dataGridClasses.DataGridListData;
                import mx.controls.listClasses.BaseListData;
       
                private var _listData:BaseListData;
                public function get listData():BaseListData {
                  return _listData;
                }
                public function set listData( value:BaseListData ):void {
                  _listData = value;
                }  
                         private function changeCB(evt:MouseEvent):void {
                          var myListData:DataGridListData = evt.target.parentDocument.listData;
                          var myDG:DataGrid = DataGrid(myListData.owner);
                 myDG.document.initDG[Number(no.text)-1] = new MultiObject(myDG.selectedItem.No, myDG.selectedItem.Name,
                 myDG.selectedItem.CheckNum, evt.target.selected);
                         } 
                ]]>
               </mx:Script>
              <mx:Text id="no" text="{data.No}" visible="false" width="0"/>
              <mx:CheckBox id="cb" selected="{data.IsChecked}" click="changeCB(event)"/>
             </mx:HBox>
           </mx:Component>
         </mx:itemRenderer>
                </mx:DataGridColumn>           
        </mx:columns>       
    </mx:DataGrid>    
    <mx:HBox width="650" horizontalAlign="center">
  <mx:Button label="Check All or None" click="checkAll()"/>
    </mx:HBox>
</mx:Application>
 


 

Flex3.0&AS3 2009. 2. 3. 00:11

itemEditor 이해와 커스텀 itemEditor 만들어보기



데이터 그리드에서 편집기능을 사용할때 우리는 보통 editable 속성값을 true 로 셋팅한것만으로 편하게

바인딩된 원 데이터를 마음대로 수정이 가능했습니다.

 

또 다른 방법으로 우리는 itemEditor 를 일반적인 컨트롤 컴포넌트들의 클래스 네임을 적어줌으로서 편하게(?) 작업이 가능했습니다.

 

하지만 그보다 복잡한 형태의 itemEditor 을 사용해야한다면 어떻게 해야할까?

 

아래 소스는 가장 복잡한 형태의 커스텀 itemEditor 을 사용함으로서 itemEditor 가 갖추어야할것들을 모두 표시 해주고 있습니다.

소스는 itemEditor 의 베이스 클래스를 HBOX 로 선언해주었습니다.

 

실제 itemEditor 가 기본적으로 갖추어야 할 것은

 

mx.controls.listClasses.IDropInListItemRenderer 인터페이스와

get listData , set listData

 

속성입니다. 그리고 set Data 에서의

 

dispatchEvent(new FlexEcent(FlexEvent.DATA_CHANGE)); 와 listData 의 [Bindable("datachange")] 또한

 

필수 입력 사항들입니다. 그렇다면 왜? 이것들이 필요한것일까? 이유는 간단합니다.

이미 IDropInListItemmRenderer 의 인터페이스를 가진 컨트롤들은 이미 선언이 되어 있기 때문입니다.

 

위의 내용들은 해당 컴포넌트가 ItemRenderer 또는 ItemEditor 에 사용되었을경우 ListBase 로 부터 데이터를 가져오기 위해

선언된 것일 뿐입니다.

 

레퍼런스의 IDropInListItemmRenderer 를 찾아보면 좀 더 자세한 설명을 얻으실수 있습니다.

 

DataGridColumn 쪽을 살펴보면 editorDataField = 'text' 라고 적혀있습니다. text 는 기본값이지만 설명을 위해 적어 두었습니다.

editorDataField 는 데이터의 필드가 아닌 itemRenderer , itemEditor 간의 데이터 통신을 위한 속성을 지칭하는것입니다.

 

우리는 기본컨트롤과의 통신을 위해 text 속성을 그대로 유지하고 바꾸지는 않겠습니다.

 

아래 보시면 set text 와 get text 가 보일겁니다. set text는 여기서 전혀 사용되지않지만 get text 는 itemRenderer 로 데이터를

보내주기 위해 콤보박스의 text 값을 보내주게 만들었습니다.

 

이전에 itemRenderer 를 설명할때

listData -> set data -> set text  로 실행된다고 하였지만. 그것은 IDropInListItemmRenderer 인터페이스를 가진

기본적인 컨트롤들의 set data 내부에서 set text 를 호출하였지만. 우리가 만든 커스텀 itemEditor 에는 그럴필요가 없기에

그냥 두었습니다.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
 <mx:Script>
  <![CDATA[

   import mx.collections.ArrayCollection;
   import mx.utils.ObjectUtil;
   
   [Bindable] private var dataSet:ArrayCollection = new ArrayCollection([
    {label:"http://blog.naver.com/mash9"},
    {label:"blog"},
    {label:"naver"},
    {label:"com"},
    {label:"mash9"}
   ]);
   
   [Bindable] public var combo:ArrayCollection = new ArrayCollection(ObjectUtil.copy(dataSet.source) as Array);
  ]]>
 </mx:Script>

 <mx:DataGrid id="grid" width="300" dataProvider="{dataSet}" editable="true">
  <mx:columns>
   <mx:DataGridColumn dataField="label" editorDataField="kkkk">
    <mx:itemEditor>
    <mx:Component>
     <mx:HBox implements="mx.controls.listClasses.IDropInListItemRenderer">
      <mx:Script>
       <![CDATA[
        import mx.controls.Alert;
        
        import mx.events.FlexEvent;
        import mx.controls.listClasses.BaseListData;
        
        private var property:String;
        
        override public function set data(value:Object):void
        {
         super.data = value;
         
         for(var i:Number = 0 ; i < cb.dataProvider.length ; i++)
             if(cb.dataProvider[i][property] == value[property])
             {
              cb.selectedIndex = i;
              break;
             }
         
         dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
        }
        
        [Bindable("dataChange")]
        private var _listData:BaseListData;
        
        public function get listData():BaseListData
           {
             return _listData;
           }
          
           public function set listData(value:BaseListData):void
           {
            property = value["dataField"];
         _listData = value;
           }
          
           public function set kkkk(value:String):void
           {
            //"not use"
           }
          
           public function get kkkk():String
           {
            return cb.text;
           }   
        
       ]]>
      </mx:Script>
      <mx:Label text="select:"/>
      <mx:ComboBox id="cb" dataProvider="{outerDocument.combo}"/>
     </mx:HBox>  
    </mx:Component>
    </mx:itemEditor>
   </mx:DataGridColumn>
  </mx:columns>
 </mx:DataGrid>

</mx:Application>


출처 : http://blog.naver.com/mash9 블로그 닫힌문님

Flex3.0&AS3 2009. 2. 2. 23:16

ListBase기반 콤포넌트 이해


ListBase기반의 콤포넌트중 List 콤포넌트의 대한 간단한 예제이다.
아래 내용중에 참고해야될 부분이 빨간색부분 event.itemRenderer.data.url1  이다.
List콤포넌트에 dataProvider 로 ArrayCollection을 바인딩시킨후 ListEvent이벤트를 통해서
List콤포넌트에 바인딩된 dataProvider의 데이타 접근할수가 있다.
ListBase계열을 상속받은 콤포넌트들은 ListBase의 data라는 프로퍼티를통해서 원시데이타에 접근할수있기때문이다.
따라서 itemRednderer.data 는 하나의 item을 가르키게 되고 원하는값을 뽑아낼수있다.

Datagrid나 Tree역시 비슷하다..


<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" height="500">
<mx:Script>
        <![CDATA[                    
            [Bindable]
            [Embed(source='assets/m2.jpg')]
            private var m1:Class; 
            
            [Bindable]
            [Embed(source='assets/m2.jpg')]
            private var m2:Class;
            
            [Bindable]
            [Embed(source='assets/m3.jpg')]
            private var m3:Class;
     
            import mx.events.ListEvent;            
            private function fnRollOver(event:ListEvent):void {
             sLoader.source= event.itemRenderer.data.url1;
            }

            private function fnRollOut(event:ListEvent):void {
                sLoader.source=""
            }  
                            
       ]]>
</mx:Script>

<mx:ArrayCollection id="dpd">
    <mx:source>  
       <mx:Object label="오만과 편견" icon="{m1}" url1="http://imgmovie.naver.com/mdi/mit500/0447/D4728-00.jpg" />
       <mx:Object label="캐리비안의 해적" icon="{m2}" url1="http://imgmovie.naver.com/mdi/mit500/0436/D3679-01.jpg"/>
       <mx:Object label="러브 액츄얼리" icon="{m3}" url1="http://imgmovie.naver.com/mdi/mit500/0368/C6843-00.jpg"/>   
     </mx:source>
</mx:ArrayCollection>

<mx:List id="lData"
 dataProvider="{dpd}"
 width="230"
 itemRollOut="fnRollOut(event);"
 itemRollOver="fnRollOver(event);"
 fontSize="12"
  height="71"/>
<mx:SWFLoader id="sLoader" width="230" height="330"/> 
</mx:Application> 

Flex3.0&AS3 2009. 1. 30. 14:48

AdvancedDataGrid row 속성 style 변경하기

[Bindable]
private var dpADG:ArrayCollection = new ArrayCollection([
    {Artist:'Pavement', Album:'Slanted and Enchanted', Price:11.99},
    {Artist:'Pavement', Album:'Brighten the Corners', Price:11.99},
    {Artist:'Saner', Album:'A Child Once', Price:11.99},
    {Artist:'Saner', Album:'Helium Wings', Price:12.99},
    {Artist:'The Doors', Album:'The Doors', Price:10.99},
    {Artist:'The Doors', Album:'Morrison Hotel', Price:12.99},
    {Artist:'Grateful Dead', Album:'American Beauty', Price:11.99},
    {Artist:'Grateful Dead', Album:'In the Dark', Price:11.99},
    {Artist:'Grateful Dead', Album:'Shakedown Street', Price:11.99},
    {Artist:'The Doors', Album:'Strange Days', Price:12.99},
    {Artist:'The Doors', Album:'The Best of the Doors', Price:10.99}
]); 


  public function myColStyleFunc(data:Object,
            col:AdvancedDataGridColumn):Object
         {
             if(data["Price"] <= 11.00)
                 return {color:0x00FF00};

             return null;
         }         


  <mx:AdvancedDataGridColumn dataField="Price"
                styleFunction="myColStyleFunc"/>

Flex3.0&AS3 2009. 1. 30. 14:07

AdvancedDatagrid] Itemrenderer 활용




<?xml version="1.0"?>
<!-- dpcontrols/adg/HierarchicalADGSimpleRenderer.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="500" height="150">

    <mx:Script>
        <![CDATA[
              import mx.collections.ArrayCollection;
              
                [Bindable]
         public var OrexhComboData:ArrayCollection = new ArrayCollection(
                [
                 {Region:"CICAGO", Territory_Rep:10,Actual:10,Estimate:20},
                 {Region:"SEOUL", Territory_Rep:100,Actual:100,Estimate:10},
                 {Region:"TEXAS", Territory_Rep:10,Actual:12,Estimate:34}
                ] );  
              
        ]]>
    </mx:Script>

    <mx:AdvancedDataGrid width="100%" height="100%" dataProvider="{OrexhComboData}" sortExpertMode="true">
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="Region" width="70"/>
            <mx:AdvancedDataGridColumn dataField="Territory_Rep"
                headerText="Territory Rep" width="100"/>
            <mx:AdvancedDataGridColumn dataField="Actual" width="70"/>
            <mx:AdvancedDataGridColumn dataField="Estimate" width="70"/>
            <mx:AdvancedDataGridColumn id="diffCol"
                headerText="Difference"/>
        </mx:columns>

        <mx:rendererProviders>
            <mx:AdvancedDataGridRendererProvider column="{diffCol}"
                 renderer="SummaryRenderer"/>
        </mx:rendererProviders>
    </mx:AdvancedDataGrid>
</mx:Application>







<?xml version="1.0"?>
<!-- dpcontrols/adg/myComponents/SummaryRenderer.mxml -->
<mx:Label xmlns:mx="http://www.adobe.com/2006/mxml" textAlign="center">
    <mx:Script>
        <![CDATA[

        override public function set data(value:Object):void
        {
            var diff:Number =
              
  Number(value["Actual"]) - Number(value["Estimate"]); 
                             // 다른필드데이타필드로부터 값얻어오는방법   value["필드명"]
            if (diff < 0)
            {

                setStyle("color", "red");
                text = "Undersold by " + usdFormatter.format(diff);
            }
            else
            {

                setStyle("color", "green");
                text = "Exceeded estimate by " + usdFormatter.format(diff);
            }
        }
        ]]>
    </mx:Script>
   
    <mx:CurrencyFormatter id="usdFormatter" precision="2"
        currencySymbol="$" decimalSeparatorFrom="."
        decimalSeparatorTo="." useNegativeSign="true"
        useThousandsSeparator="true" alignSymbol="left"/>
</mx:Label>