基于SWT处理大量数据的表(Table)和树(Tree)

 提要
  虚拟表和树允许开发人员快速创建具有大量数据的表(Table)和树(Tree),并且能够有效地进行填充。本文概述了如何在SWT应用程序中使用虚拟表和树。
  作者:Beatriz Iaderoza 和 Grant Gayed, IBM渥太华实验室 2006年6月5月
  表和树概述
  在SWT应用程序中创建表或树时,每一项(行)由TableItem或TreeItem表示。如果它们的数量非常庞大或它们需要进行大量的计算,那么创建这些项将花费大量时间。这会给传统的表或树带来一个问题,因为它们的项需要预先创建好,从而导致初始化过程非常慢。此外,如果用户并不查看所有的项——对于大的表和树通常是这样,那么初始代价中的大部分都被浪费了。
  虚拟表和树非常适合处理这类情况。在虚拟表和树中,只有在需要时才创建项。这确保了不会花费时间和内存处理那些从未被查看过的项,而且表或树的填充散布在控件的整个生命周期内,而不是全部预先填充。
  使用虚拟表的一个场景可能是显示图书馆数据库的查询结果。使用非虚拟表时,初始填充时间可能会非常慢,因为可能返回一个巨大的数据集,并且数据库要花费大量时间获取项目的摘要信息。然而,在这种情况下,虚拟表有出色表现,因为初始填充时间只是获取第一页项目的时间。在一个具有良好启发式排队(ranking heuristics)的结果集的系统中,用户基本上只查看这些项目。
  下面几节描述了如何使用虚拟表和树,并且提供了示例代码和说明。应当注意的是,虚拟表一节包含的概念同样适用于虚拟树。
  虚拟表
  为了填充一个虚拟表,你必须指定它包含项目的数量,并且在SWT.SetData上注册监听器。项目数量用于设置表的垂直流动条的最大值,这个值可以在它的生命周期内变化。
  当请求一个未初始化的项目时,通常是因为该项目第一次对用户可见,会自动创建一个项目并传递给SWT.SetData的监听器对它的数据进行设置。项目数据由项目的所有属性组成(文本、图片、颜色、勾选状态)。系统可以自由地以任意顺序请求任意项目。项目一旦被初始化——或者通过SWT.SetData监听器,或者通过TableItem API,例如setText(),那么它的值就持久保存,SWT.SetData listener不再被调用设置它的值。唯一例外的情况是,如果使用表格的clear() API清空一个项目时,监听器会在必要时被调用设置它的数据。
  让我们看一个简单的例子,其中涉及到创建和使用虚拟表的基本概念。清单1展示了创建具有10000个项目的表,并对已设置数据的项目进行修改:
  int COUNT = 100000;
  final String[] itemStrings = new String[COUNT];
  for (int i = 0; i < COUNT; i++) {
   itemStrings[i] = "item " + i;
  }
  final Table table = new Table(shell, SWT.BORDER | SWT.VIRTUAL);
  table.setBounds(11, 11, 458, 244);
  table.addListener(SWT.SetData, new Listener() {
   public void handleEvent(Event event) {
    TableItem item = (TableItem) ev

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值