封装自己的flex工具_双击适应内容宽度的DataGrid

 
目前Flex api提供的DataGrid没有双击子适应内容宽度的功能,咱们可以补充一下这个功能!

1.建立目录结构org.sk.controls,org.sk.controls.vo

2.类MyDataGrid 继承 DataGrid,

Java代码
  1. package org.sk.controls   
  2. {   
  3. import flash.events.MouseEvent;   
  4. import flash.text.TextField;   
  5. import flash.text.TextLineMetrics;   
  6.   
  7. import mx.collections.ArrayCollection;   
  8. import mx.controls.DataGrid;   
  9. import mx.controls.dataGridClasses.DataGridColumn;   
  10. import mx.core.ScrollPolicy;   
  11.   
  12. import org.sk.controls.vo.DataGridColumnInfoVo;   
  13.   
  14. /**  
  15.  
  16. * @author Ozone  
  17. * MyDataGrid-> DataGrid  
  18. * 1. 双击 自定适应内容宽度  
  19. * 思路: 1.先给 DataGrid的header添加 MouseDoubleClick事件  
  20. * 2.记录 所有列的x坐标  
  21. * 3.双击是 根据x的坐标寻找 Column  
  22. * 4.找到Column后,找出 此列下最长的 文字的 长度  
  23. * 5.设置此Column的width 为 合适的长度的  
  24. */  
  25. public class MyDataGrid extends DataGrid   
  26. {   
  27. private var widthMap:Array=[]; //存放 列,宽度 映射关系   
  28. private var _textField:TextField=new TextField();   
  29.   
  30. /**  
  31. * 构造  
  32. */  
  33. public function MyDataGrid()   
  34. {   
  35. super();   
  36. this.doubleClickEnabled=true;   
  37. this.horizontalScrollPolicy=ScrollPolicy.ON;   
  38. }   
  39.   
  40. override protected function createChildren():void  
  41. {   
  42. super.createChildren();   
  43. this.header.addEventListener(MouseEvent.DOUBLE_CLICK, mouseDblClickHandler);   
  44. }   
  45.   
  46. override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void  
  47. {   
  48. super.updateDisplayList(unscaledWidth, unscaledHeight);   
  49. widthMap.length=0;   
  50. var tmpWidth:uint=0;   
  51. for (var i:uint=0; i    
  52.   
  53. /*表头 双击事件*/  
  54. private function mouseDblClickHandler(e:MouseEvent):void  
  55. {   
  56. var colVo:DataGridColumnInfoVo=getColumnInfo(this.mouseX);   
  57. if (colVo)   
  58. {   
  59. var maxLen:int=getMaxLength(colVo.label);   
  60. if (maxLen != -1)   
  61. {   
  62. maxLen+=30;   
  63. var col:DataGridColumn=columns[colVo.index];   
  64. if (col)   
  65. {   
  66. col.width=maxLen;   
  67. }   
  68. }   
  69. }   
  70. }   
  71.   
  72. /*获取 列索引 */  
  73. private function getColumnInfo(mousex:int):DataGridColumnInfoVo   
  74. {   
  75. var scrollColCount:int = this.horizontalScrollPosition;   
  76. if(scrollColCount!=0){   
  77. mousex += widthMap[scrollColCount-1].min + DataGridColumnInfoVo.PRECSITION;   
  78. }   
  79. for each (var colVo:DataGridColumnInfoVo in widthMap)   
  80. {   
  81. if (colVo.min    
  82.   
  83. /*获取 最长行的长度*/  
  84. private function getMaxLength(colLabel:String):int  
  85. {   
  86. var arr:ArrayCollection=this.dataProvider as ArrayCollection;   
  87. var maxLen:int=-1;   
  88. if (arr)   
  89. {   
  90. for (var i:uint=0; i  maxLen)   
  91. maxLen=line.width;   
  92. }   
  93. }   
  94. return maxLen;   
  95. }   
  96. }   
  97. }  
package org.sk.controls
{
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextLineMetrics;

import mx.collections.ArrayCollection;
import mx.controls.DataGrid;
import mx.controls.dataGridClasses.DataGridColumn;
import mx.core.ScrollPolicy;

import org.sk.controls.vo.DataGridColumnInfoVo;

/**
* 
* @author Ozone
* MyDataGrid-> DataGrid
* 1. 双击 自定适应内容宽度
* 思路: 1.先给 DataGrid的header添加 MouseDoubleClick事件
* 2.记录 所有列的x坐标
* 3.双击是 根据x的坐标寻找 Column
* 4.找到Column后,找出 此列下最长的 文字的 长度
* 5.设置此Column的width 为 合适的长度的
*/
public class MyDataGrid extends DataGrid
{
private var widthMap:Array=[]; //存放 列,宽度 映射关系
private var _textField:TextField=new TextField();

/**
* 构造
*/
public function MyDataGrid()
{
super();
this.doubleClickEnabled=true;
this.horizontalScrollPolicy=ScrollPolicy.ON;
}

override protected function createChildren():void
{
super.createChildren();
this.header.addEventListener(MouseEvent.DOUBLE_CLICK, mouseDblClickHandler);
}

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
widthMap.length=0;
var tmpWidth:uint=0;
for (var i:uint=0; i 

/*表头 双击事件*/
private function mouseDblClickHandler(e:MouseEvent):void
{
var colVo:DataGridColumnInfoVo=getColumnInfo(this.mouseX);
if (colVo)
{
var maxLen:int=getMaxLength(colVo.label);
if (maxLen != -1)
{
maxLen+=30;
var col:DataGridColumn=columns[colVo.index];
if (col)
{
col.width=maxLen;
}
}
}
}

/*获取 列索引 */
private function getColumnInfo(mousex:int):DataGridColumnInfoVo
{
var scrollColCount:int = this.horizontalScrollPosition;
if(scrollColCount!=0){
mousex += widthMap[scrollColCount-1].min + DataGridColumnInfoVo.PRECSITION;
}
for each (var colVo:DataGridColumnInfoVo in widthMap)
{
if (colVo.min 

/*获取 最长行的长度*/
private function getMaxLength(colLabel:String):int
{
var arr:ArrayCollection=this.dataProvider as ArrayCollection;
var maxLen:int=-1;
if (arr)
{
for (var i:uint=0; i  maxLen)
maxLen=line.width;
}
}
return maxLen;
}
}
}

3. 用到的 值对象

Java代码
  1. package org.sk.controls.vo   
  2. {   
  3. import mx.controls.dataGridClasses.DataGridColumn;   
  4.   
  5. public class DataGridColumnInfoVo   
  6. {   
  7. private var _index:uint;   
  8. private var _min:int;   
  9. private var _max:int;   
  10. private var _label:String;   
  11. public static const PRECSITION:int = 3;   
  12. public function DataGridColumnInfoVo(_index:uint,_label:String,_min:int,_max:int)   
  13. {   
  14. this._index = _index;   
  15. this._label = _label;   
  16. this._min = _min;   
  17. this._max = _max;   
  18. }   
  19. public function get index():uint{   
  20. return _index;   
  21. }   
  22. public function set index(index:uint):void{   
  23. _index = index;   
  24. }   
  25. public function get label():String{   
  26. return _label;   
  27. }   
  28. public function set label(label:String):void{   
  29. _label = label;   
  30. }   
  31. public function get min():int{   
  32. return _min;   
  33. }   
  34. public function set min(min:int):void{   
  35. _min = min;   
  36. }   
  37. public function get max():int{   
  38. return _max;   
  39. }   
  40. public function set max(max:int):void{   
  41. _max = max;   
  42. }   
  43. }   
  44. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值