国产探花免费观看_亚洲丰满少妇自慰呻吟_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 中。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成都市| 隆林| 肃南| 吴桥县| 张北县| 日照市| 鞍山市| 灵台县| 顺昌县| 温泉县| 同江市| 开封市| 迭部县| 开阳县| 全州县| 阳新县| 尤溪县| 南平市| 青岛市| 红桥区| 博白县| 玉田县| 蒲城县| 黄石市| 石棉县| 浪卡子县| 邹城市| 营口市| 武城县| 永泰县| 金沙县| 甘肃省| 红原县| 新乡市| 东宁县| 沙雅县| 盐城市| 拉萨市| 五寨县| 海宁市| 蒙山县|