| VB 源码 | VC 源码 | ASP源码 | JSP源码 | PHP源码 | CGI源码 | FLASH源码 | 素材模板 | C 源程序 | 站长工具 | 站长教程 |

网页设计

网站策划
网页设计

本类阅读TOP10

·经典网页设计欣赏
·Flash Loading制作全接触
·用Flash制作简单闪光字
·下拉菜单全攻略(Javascript篇)
·PhotoShop热键大全
·网页效果集合
·哈利波特书封面设计欣赏
·教你最基本的国画常识(图文解说)
·一流的设计师,一流的PHOTOSHOP教程
·Flex 入门教程

站内搜索

在List组件中使用渲染器
在网上看过很多人转载darronschall的 LabelCellRenderer 例子,其中有个错误,把myList.cellRenderer = "LabelCellRenderer";这行代码放到了注释里面去了,但是到处转载的依然没有修正(其实原文是正确的)。

其实看了这个我们并没有求甚解,要知道授人予鱼,不如授人予渔。我们再来看下为什么通过cellrenderer可以给List、DataGrid、Tree 和 Menu 组件以及其它列表组件增强单元格内容显示。

我们首先要从List组件开始分析,List 类至关重要。DataGrid、Tree 和 Menu 组件是 List 类的扩展。

List 类由行构成。这些行显示滑过和选区突出显示,用作行选区的点击状态,并在滚动中扮演重要的角色。除了选区突出显示和图标(如节点图标和 Tree 组件的展开箭头)之外,行还包含一个单元格(或者,如果是 DataGrid,则包含多个单元格)。在默认情况下,这些单元格是实现 CellRenderer API 的 TextField 对象。但是,您可以让 List 使用不同的组件类作为每一行的单元格。唯一的要求是该类必须实现 List 用于与单元格通信的 CellRenderer API。

List 类使用一种非常复杂的算法进行滚动。一个列表只会列出它一次能显示的最多行数,超出 rowCount 属性的值的项目根本不会获得行。在列表滚动时,它会将所有行上下移动(取决于滚动方向)。然后,列表将重复使用滚出视图的行;列表会重新初始化这些行,并使用它们作为正在滚入视图的新行,方法是将旧行的值设置为视图中的新行,然后将旧行移到新项目滚入视图的位置。

要使用 CellRenderer API,您必须编写包含下面四个方法的类

CellRenderer.getPreferredHeight() 返回单元格的首选高度
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类实现的这几个方法代码:

function createChildren(Void) : Void {
    label = createObject("Label", "label", 1, { styleName:this, owner:this });
    label.html = true;
    size();
}

// setSize is implemented by UIComponent and calls size(), after setting
// __width and __height
function size(Void) : Void {
    label.setSize(__width, __height);
    // make sure the label field is in the top-left 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 getPreferredHeight(Void) : Number {
    // this is the height with the default font, you might
    // 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就是指定单元格渲染的连接ID
2 : myList.cellRenderer = "LabelCellRenderer";

也许看完这些,你可以做出更好效果的渲染器来。要注意的是,只有flashMX2004的List组件才支持。




相关文章
  • 让SWF文件不显示在IE缓存中
  • 一个Flash调色板
  • 给ActionScript初学者的建议
  • 实现2004中Media组件多首mp3连放
  • 验证身份证号是否正确的代码
  • Flash 与 html 的一些实用技巧
  • Flash MX 2004 数据绑定
  • 用Flash模拟“穿越时空”
  • Flash 交互打字效果
  • Flash做文字随波逐流的效果
  • 用Flash 5制作动感按钮
  • Flash制作文字“幻影”
  • Flash Loading制作全接触
  • 用Flash制作简单闪光字
  • 一个很cool的FLASH水波制作
  • 用Flash制作落地有声的瓶子
  • 让画卷打开来:用Flash做转轴效果
  • 用flash制作旋幻时针
  • Flash 5.0的十个“新”得
  • 一个很cool的FLASH水波制作
  • 相关软件

  • FlashPac C 开发程序库  
  • Flash5 螺旋图形这是利用 Flas  
  • Flash5 碰壁小球本来用 Flash  
  • 这是 Flash 5 Action Sc  
  • Flash5 图片角度变换这个程序的代码  
  • 到了 Flash 5,精确下载  
  • 21个透明flash文件  
  • 17个透明FLASH  
  • 60个透明FLASH  
  • 40个韩国flash源文件  



  • 月光软件源码下载编程文档电脑教程网站优化网址导航网络文学游戏天地生活休闲写作范文安妮宝贝站内搜索
    电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
    音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

    月光软件站·版权所有