穿梭于丛林之间  
一个热爱设计的孩纸,有着程序猿的情节,干着穿山越岭工作。

今天做个项目时需要用到datagrid与checkbox结合,找了一篇很好的文章,《在Flex中简单实现 dataGrid结合CheckBox使项目可选、全选、反选》,但是发现其checkbox在属性列中没有居中,没有达到理想效果,继续在网上游弋,尔后又找到一篇,摘取了其中用于将checkbox剧中的代码,well done!

以下是完善后的代码:

CheckBoxHeaderRenderer.as

package 
{
    
    import flash.display.DisplayObject;
    import flash.events.Event;
    import flash.text.TextField;
    
    import mx.collections.ArrayCollection;
    import mx.controls.CheckBox;
    import mx.controls.DataGrid;
    
    public class CheckBoxItemDataRenderer extends CheckBox  
    {  
        private var currentData:Object; //保存当前一行值的对象  
        public function CheckBoxItemDataRenderer()  
        {  
            super();          
            this.addEventListener(Event.CHANGE, changeHandler);  
        }  
        override public function set data(value:Object):void  
        {  
            this.currentData= value;  
            this.selected = value.selected == "true"?true:false;  
        }  
        
        protected function changeHandler(event : Event) : void  
        {  
            currentData.selected = this.selected.toString();  
        }  
        /*override public function get data():Object{  
        return currentData;  
        }*/
        
        
        // 居中展现   
        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void   
        {   
            super.updateDisplayList(unscaledWidth, unscaledHeight);   
            var n:int = numChildren;   
            for(var i:int = 0; i < n; i++)   
            {   
                var c:DisplayObject = getChildAt(i);   
                if( !(c is TextField))   
                {   
                    c.x = Math.round((unscaledWidth - c.width) / 2);   
                    c.y = Math.round((unscaledHeight - c.height) /2 );   
                }   
            }   
        }   
    }  
}

CheckBoxItemDataRenderer.as

package 
{
    
    import flash.display.DisplayObject;
    import flash.events.Event;
    import flash.text.TextField;
    
    import mx.collections.ArrayCollection;
    import mx.controls.CheckBox;
    import mx.controls.DataGrid;
    
    public class CheckBoxItemDataRenderer extends CheckBox  
    {  
        private var currentData:Object; //保存当前一行值的对象  
        public function CheckBoxItemDataRenderer()  
        {  
            super();          
            this.addEventListener(Event.CHANGE, changeHandler);  
        }  
        override public function set data(value:Object):void  
        {  
            this.currentData= value;  
            this.selected = value.selected == "true"?true:false;  
        }  
        
        protected function changeHandler(event : Event) : void  
        {  
            currentData.selected = this.selected.toString();  
        }  
        /*override public function get data():Object{  
        return currentData;  
        }*/
        
        
        // 居中展现   
        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void   
        {   
            super.updateDisplayList(unscaledWidth, unscaledHeight);   
            var n:int = numChildren;   
            for(var i:int = 0; i < n; i++)   
            {   
                var c:DisplayObject = getChildAt(i);   
                if( !(c is TextField))   
                {   
                    c.x = Math.round((unscaledWidth - c.width) / 2);   
                    c.y = Math.round((unscaledHeight - c.height) /2 );   
                }   
            }   
        }   
    }  
}

 

posted on 2013-05-25 21:25  perrychum  阅读(281)  评论(0)    收藏  举报