在网上看过很多人转载darronschall的LabelCellRenderer例子,其中有个错误,把myList.cellRenderer=LabelCellRenderer;这行代码放到了注释里面去了,但是到处转载的依然没有修正(其实原文是正确的)。其实看了这个我们并没有求甚解,要知道授人予鱼,不如授人予渔。
CellRenderer.getPreferredborder=1Height()返回单元格的首选高度
CellRenderer.getPreferredWidth()返回单元格的首选宽度
CellRenderer.setSize() 设置单元格的宽度和高度
CellRenderer.setValue()设置要显示在单元格中的内容基于列表的组件将使用该类与单元格通信。这就是我们看到的darronschall定义的LabelCellRenderer类。系统将为单元格自动指定两个方法和一个属性
CellRenderer.getCellIndex()返回包含单元格渲染器数据字段的名称的字符串
CellRenderer.getDataLabel()返回包含两个字段(columnIndex和 rowIndex)的对象,这两个字段指明单元格的位置
CellRenderer.listOwner指向包含单元格的列表的引用以便允许它与基于列表的组件通信。例如,假设单元格内包含一个复选框,该复选框导致行在单击时被选中。单元格渲染器需要引用包含它的基于列表的组件,以便调用基于列表的组件的selectedIndex属性。同时,单元格需要知道它当前正在渲染的项目索引,以便能够将 selectedIndex设置为正确的编号;单元格可以使用CellRenderer.listOwner 和CellRenderer.getCellIndex()达到此目的。您不需要实现这些API;在将单元格放到基于列表的组件内时,单元格将自动接收这些API。我们来看下LabelCellRenderer类实现的这几个方法代码:functioncreateChildren(Void): Void
label = createObject(Label, label, 1,styleName:this,owner:this );
label.html = true;
size();// setSize is implemented by UIComponent and callssize(),after setting// __width and __border=1 Heightfunctionsize(Void) : Void
label.setSize(__width, __border=1 Height);
// make sure the label field is in the top-center corner
// of the row
label._x = 0;
label._y = 0;function setValue(str:String,item:Object,sel:Boolean) : Void
// hide the label if no data to display
label._visible = (item!=undefined);
// this line actually sets htmlText
label.text = item.label;function getPreferredborder=1Height(Void) :Number
// this is the border=1 Height with the default font, youmight
// need to adjust this to suit your needs
return 18;function getPreferredWidth(Void) : Number
// default to the width of the listbox
return__width;其中用来显示html标记的就是setValue方法了。我们定义了这个类后,剩下就是对List组件来设置新的单元格渲染器了。使用下面的代码:1://LabelCellRenderer就是指定单元格渲染的连接ID2 : myList.cellRenderer=LabelCellRenderer;也许看完这些,你可以做出更好效果的渲染器来。要注意的是,只有flashMX2004的List组件才支持。
作者:Liu21st
