【问题标题】:Sorting of tree implemented with NatTable用 NatTable 实现的树排序
【发布时间】:2016-09-03 11:42:12
【问题描述】:

我正在尝试实现使用 NatTable 实现的树排序,但我无法真正理解它是如何工作的。我的问题是,在对“树”列之外的任何列进行排序后,子节点可以移动到无效的父节点。尽管元素的顺序在所有层次结构上都是正确的。所以基本上我不明白TreeList.Format.getComparator() 的目的以及它与为列注册的比较器的关系,我不明白节点何时以及为什么可以更改其父级。

我从示例开始 TreeGridExample 并且我已经设法创建了我遇到相同问题的测试数据

private void createDatums() {       
    createDatum(null, "a", 2);        
    createDatum("a", "aa1", 0);        
    createDatum(null, "b", 0);        
    createDatum("b", "bb1", 0);
    createDatum(null, "m", 1);
    createDatum(null, "n", 0);
}

如果我对列 bar 进行排序,bb1 节点从 b 跳转到 n 并且当排序被删除时,它又是 b 的子节点

【问题讨论】:

    标签: swt jface glazedlists nebula nattable


    【解决方案1】:

    您的比较器需要考虑树的层次结构。

    请参阅herehere 了解更多信息。

    【讨论】:

    • 我已经阅读了这两个讨论,但我仍然找不到节点更改父节点的原因。正如我所写,即使使用 NatTable 示例代码,我也遇到了同样的问题。
    • 据我所知,树是通过按 DFS 顺序遍历列表创建的。您应该将它与管理层次结构的树格式对象结合起来。
    【解决方案2】:

    关于我们的示例,我们的SortableTreeComparator 可能无法正常工作。而答案并非微不足道。

    首先,为了使 TreeList 正常工作,您需要将列表中的元素按正确的顺序排列。这是树比较器。

    您还想要在最低级别添加自定义排序。因此,在这种情况下,您需要扩展比较器以检查树级别。

    parent 改变的原因是因为你的比较器改变了集合中的顺序,因此破坏了整个树结构。

    我们设法使它与GroupByComparator 中的 GroupBy 功能一起使用,但我们在列表中有 GroupByObjects。而且我记得要让所有东西协同工作是一项艰巨的工作。

    请创建一个工单来修复SortableTreeComparator,不确定我什么时候可以处理它。

    【讨论】:

      猜你喜欢
      • 2016-08-30
      • 2018-09-16
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      相关资源
      最近更新 更多