【问题标题】:Tree implementation using NatTable使用 NatTable 实现树
【发布时间】:2016-08-30 00:45:28
【问题描述】:

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

  1. 在 TreeViewer 中,我使用 setInput() 来提供新的输入。我怎样才能用 NatTable 达到同样的效果?在底层数据源List 上调用clear()addAll() 是否正确? (我使用 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 作为示例)。这里有什么问题?

【问题讨论】:

    标签: java swt jface nebula nattable


    【解决方案1】:

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

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

    【讨论】:

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

      【讨论】:

      • 谢谢,我已经实现了延迟加载并使用相同的方法。但是我遇到了关于排序的新问题。我已经更新了我的问题。非常感谢您的帮助
      • 要注意的最重要的事实是,您需要考虑两个比较器进行树排序。一种以正确的顺序将树带入内容。听起来您的比较器仅检查内容并且不尊重树层次结构,因此破坏了树结构。但如果没有进一步的信息,我不能说。如果这没有帮助,我还建议创建一个新问题。
      • 我创建了一个新问题,因为我几乎要放弃了。即使使用示例代码,我也有这个问题。 stackoverflow.com/questions/37105593/…
      猜你喜欢
      • 2016-09-03
      • 2017-02-08
      • 2021-04-18
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      • 2013-08-16
      相关资源
      最近更新 更多