1

我尝试从 JFace TreeViewer 切换到 NatTable。不幸的是,我没有找到很多关于使用 NatTable 实现树的文档。所以我有一些问题

  1. 我曾经使用 TreeViewersetInput()提供新的输入。我怎样才能用 NatTable 达到同样的效果?这是调用底层数据源的正确clear()方法addAll()List?(我使用 GlazedLists)

  2. 我在查询数据库后使用描述clear()/addAll()方式传递新数据。并且在树的展开状态丢失后,所有节点都折叠起来。使用 JFace TreeViewer,我使用 getExpandedElements()/setExpandedElements()来保持展开状态。NatTable 中有类似的东西吗?

  3. 是否可以仅在单击父节点时加载子树节点?我无法预先构建所有树数据,因为我可以在其中包含循环(严格来说,我的数据并不是真正的树,但像树一样显示它很方便)

UPD:不知道我应该在这里问还是创建单独的问题

  1. 我有排序问题。我在这里找到了类似的讨论https://www.eclipse.org/forums/index.php?t=msg&th=489524但我仍然没有深入的了解。

我的问题:在对“树”列之外的任何列进行排序后,子节点可以移动到无效的父节点。尽管元素的顺序在所有层次结构上都是正确的。我使用SortableTreeComparatortreeComparator使用我的自定义比较器(不像GlazedLists.beanPropertyComparator示例中那样)。这里有什么问题?

4

2 回答 2

1
  1. 是的,这很好,甚至建议这样做。NatTable 可视化数据。它不关心它来自哪里,至少是否IDataProvider能够以二维方式提供数据。由于我们的抽象级别,我们setInput()在 NatTable 中没有。在 1.4 中,我们打开了 API 以便能够将 设置IDataProviderDataLayer运行时,这与此类似。
  2. 您需要实现一个ExpansionModel记住扩展状态的方法。在 NatTable 中,GroupByExpansionModel由于相同的原因,我们有相同的。
  3. 我自己还没有在 NatTable 中这样做,但我经常看到这种情况。所以是的,这是可能的。IIRC,您需要实现一个自定义ITreeRowModel,如果需要,在展开时执行延迟加载。我建议扩展GlazedListTreeRowModel并检查您需要覆盖的各种扩展方法。
于 2016-05-06T06:26:18.337 回答
1

首先,您可以查看NatTable 示例并查看树的实现方式。

  1. 是的,数据源列表是放置和管理数据对象的地方。
  2. 为了管理扩展状态,您可以使用作为输入ca.odell.glazedlists.TreeList.ExpansionModel的一部分。TreeList
  3. 据我所知,NatTable 的主要优势之一是能够按需加载数据,只有在它应该变得可见时。这是默认行为。
于 2016-05-04T16:05:20.443 回答