国产探花免费观看_亚洲丰满少妇自慰呻吟_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 中。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 土默特右旗| 固安县| 城口县| 齐齐哈尔市| 平阳县| 保靖县| 宜宾县| 咸丰县| 斗六市| 新昌县| 黄梅县| 乳源| 武邑县| 临清市| 丹江口市| 定远县| 屯留县| 会宁县| 南汇区| 平谷区| 班戈县| 唐河县| 深州市| 鲁山县| 孟连| 泰和县| 江津市| 元阳县| 翼城县| 嫩江县| 汶上县| 建始县| 长岛县| 郴州市| 永年县| 泽普县| 林口县| 湘潭县| 寻乌县| 增城市| 吉水县|