解读 LWUIT 之六:使用表格(Table)和树(Tree)

来源:互联网 发布:92game 免费源码 编辑:程序博客网 时间:2024/05/21 10:14

解读 LWUIT 之六:使用表格(Table)和树(Tree)

LWUIT 开发指南下载
作者写的 Hello Table、Hello Tree 源代码下载
        通过上面几篇博客的介绍,我们对 LWUIT 的控件有了一个大概的了解。在这篇博客里,我们将按照官方开发指南里的顺序继续介绍两个新的 LWUIT 控件—— Table 和 Tree,着重介绍它们的使用,并附加示例源代码。而对于它们的 MVC 应用没有过多介绍,MVC 不是一二个小小的 demo 就可以说的明白的,需要我们在项目中不断地应用与领会。关于更多 LWUIT 的 MVC 的介绍请参考作者的后续博客。

        注:源码编写中关于 .res 的编写这里不再赘述,详细编写步骤请参考作者的前一篇博客《解读 LWUIT 之二:关于 LWUIT 开发指南中的 Hello World》。每个项目的 .res 具体配置请到作者上传源码中的 res 目录下使用 ResourceEdit 查看。

        com.sun.lwuit.table.Table 控件
        Table 是一种容量大小可变的表格控件,它的项可以设置为可编辑或者不可编辑。正如下篇博客中将要介绍的 List 控件,Table 也有它自己的模型组件(TableModel)并且有一个默认的模型实现(DefaultTableModel)。
        不同于 List 的是,创建 Table 必须首先创建一个表示数据模型的 TableModel。通过重写 TableModel 的 isCellEditable 方法可以设定表的指定单元是否可以编辑。
        使用 Table 控件继承自 Container 的 setScrollableX 方法可以设置表格能够沿 X 轴左右滚动,这样我们的表就可以在屏幕后边自由“扩展”了。Table 不像 List 似的拥有自己的 CellRenderer(ListCellRenderer),专门负责为每一个实例的展示框架填充展示内容,每一个 继承自 Table 的类必须 DIY,通过重写 Table 的 createCell 方法自行负责框架填充。请注意 createCell 能够接收用户事件并且演示动画效果,对于 Table 构架的展示是动态的,因此在 Table 的生命周期中 createCell 会占用一定的系统资源。绚烂的特效的背后总是有一定的性能付出作为代价的。
        下面是作者写的 HelloTable 源代码:

 
        下面是作者写的 HelloTable 运行效果图:

HelloTable 运行效果图

        com.sun.lwuit.tree.Tree 控件
        Tree 的设计非常类似于 Table,它用来表达一些划分等级的数据,比如一个文件体系。如果某些基础数据具有自己的等级划分,比如一个公司的员工结构或者一个文件系统,那么这些基础数据可以用 Tree 来表达。
        针对这个原因,LWUIT 专门为 Tree 设计了一个单独的模型,TreeModel 接口。为 Tree 设计一个模型类是没有意义的,因为这样一个类并不能被当做通用的 Tree 的数据模型,因此 Tree 不像 List 和 Table 那样,它没有 DefaultTreeModel。我们必须自行通过实现 TreeModel 的 getChildren 和 isLeaf 方法来创建 Tree 的数据模型。
        getChildren 方法用来返回传入节点的所有子节点。根节点是不被显示在屏幕上的,如果想返回根节点的所有子节点可以以 null 为参数传入。isLeaf 方法返回传入节点是否叶子节点,叶子节点没有子节点并且无法展开。
        HelloTree 源代码如下:

Node.java 源代码:

HelloMidlet.java 源代码:

        HelloTree 运行效果图:

HelloTree 运行效果图
        当然,这只是一个简单粗糙的 Tree demo。读者可以通过调用 Tree 的静态方法,诸如 setFolderIcon、setFolderOpenIcon、setNodeIcon 来设置节点图标,达到跟电脑文件系统一样的视觉效果。如果这样还不满意的话,还可以通过自定义 Tree(即写一个继承自 Tree 的类),重写 Tree 的 createNodeComponent 方法,然后通过自定义节点图标、节点格式来达到更加绚丽的效果。