国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

7.8.為DataGrid創建一個獨立的復選框項渲染器

2024-04-27 13:52:00
字體:
來源:轉載
供稿:網友
7.8.1.問題
你要為DataGrid 創建一個含有CheckBox 的itemRenderer,無論DataGridColumn 的寬度如何,都要始終保持CheckBox 在renderer 的中央。
7.8.2. 解決辦法
繼承CheckBox 的類,并且重寫updateDisplayList 方法,從而設置CheckBox 的位置,在clickHandler 中增加部分功能:根據CheckBox 的選中狀態設置DataGrid 里的變量值。
7.8.3. 討論
下邊是一個可以把自己放置在DataGridColumn 中央的itemRenderer。這個類己經完成了所有renderer 的功能,并且把MouseEvent 繼續向外派發,如果你對這個事件感興趣,可以捕獲它,并做某些操作。例如你可以在DataGrid 所在的文件里注冊一個監聽器用于監聽MouseEvent,在事件發生之后可以使一個Lable 顯示當前己被選中CheckBox 的個數。
+展開
-ActionScript
package {
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import flash.text.TextField;
import mx.controls.CheckBox;
import mx.controls.dataGridClasses.DataGridListData;
public class CenteredCheckBoxItemRenderer extends CheckBox {
// this function is defined by mx.controls.CheckBox
// it is the default handler for its click event
override protected function clickHandler(event:MouseEvent):void {
super.clickHandler(event);
data[DataGridListData(listData).dataField] = selected;
}
// center the checkbox icon
override protected function updateDisplayList(w:Number,h:Number):void{
super.updateDisplayList(w, h);
var n:int = numChildren;
for (var i:int = 0; i < n; i++){
var c:DisplayObject = getChildAt(i);
// CheckBox component is made up of icon skin and label TextField
// we ignore the label field and center the icon
if(!(c is TextField)){
c.x = Math.round((w - c.width) / 2);
c.y = Math.round((h - c.height) / 2);
}
}
}
}
}

在以上的代碼中有兩點值得注意:1、這個類沒有實現ClassFactory 接口,這意味著,我們可以把這個類的全名作為DataGrid 的itemRenderer 屬性。又因為這個類是一個dropin renderer ,因為他繼承了CheckBox ,CheckBox 繼承了Button,Button 實現了IDropInListItemRenderer 接口, 所以你可以根據一個傳入來的外部變量設置它的選中狀態。2、你不必去重寫data 的set get 方法,因為這些方法我們己經從CheckBox 那里繼承了。
 
+展開
-ActionScript
data[DataGridListData(listData).dataField] = selected;

這里我們用了listData,這是IDropInListItemRenderer 里定義的屬性,也就是說,所有drop-in renderer 都有這個屬性,系統創建renderer 時會首先初始化listData 這個屬性,接下來才會根據listData 去初始化data。dataField 是我們在column 上配置的屬性,在本例中, dataField 應該是CheckBox 在dataprovider 里對應的屬性名。這樣,data[DataGridListData(listData).dataField]就是那個屬性名對應的值了,在這里說值,不太恰當,因為它在等號左邊,這里應該說是dataProvider 里那個變量的引用,就是說,你改了它,dataProvider 里的值也就跟著改了。

原文是想說明,如何設置itemRenderer 中的組件處于單元格的中央,可是整節都在講listData。不過,設置位,卻實沒有什么可說的,都在updateDisplayList 中。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黔西县| 隆德县| 霍山县| 宜兰县| 申扎县| 图们市| 余庆县| 汽车| 乌拉特前旗| 万山特区| 秀山| 宜章县| 曲靖市| 西畴县| 布拖县| 义马市| 寿光市| 民县| 嘉兴市| 泗水县| 商丘市| 丰镇市| 五指山市| 高邑县| 卢氏县| 紫金县| 濉溪县| 台山市| 睢宁县| 光山县| 卢氏县| 镇江市| 沁阳市| 崇信县| SHOW| 金昌市| 依兰县| 大邑县| 绥中县| 佛山市| 太保市|