Vaadin Treetable - 自定义排序以跳过父行

时间:2013-07-15 11:25:56

标签: java sorting parent vaadin treetable

在我的Vaadin 7项目中,我需要在排序时忽略treetable的父节点(行)。我可以使用ItemSort自定义排序,但我不知道如何跳过父节点!

仅供参考:我能够使用ItemId识别我的父节点。

*** 更新 * **

我使用的是Hierarchical Container,而我的Tree与此类似:

Name            Nos             salary
+ Male(Node 1)  5               $12000
  + Young       3               $6000
    A           1               $3000
    B           1               $1000
    c           1               $2000
  + Old         2               $6000
    A           1               $3000
    B           1               $3000
+ Female(Node 2)5               $13000
  + Young       3               $5000
    A           1               $2000
    B           1               $1000
    c           1               $2000
  + Old         2               $8000
    A           1               $5000
    B           1               $3000

问题在于,当我对工资栏进行排序时,它包括每个人的工资总和,男性,年轻人和年轻人。老","女,年轻&老"行和调整"男,女"的位置和#34;年轻,年老"类别。

我只想跳过自定义排序中的父节点。它应该只有子节点。简单来说。应修复所有父节点,并且只需对子节点进行排序。

更新了USECASE

具有相同父项和两个元素的两个元素没有子节点 然后我使用了DefaultItemSorter.compare()。我忽略了所有其他用例。

1 个答案:

答案 0 :(得分:1)

我有一个相关的问题,有特殊的树表排序。我最终编写了自己的Container和Comperator实现。

您的问题取决于您使用的容器,因为排序是由底层容器而不是表完成的。默认情况下,TreeTable使用HierarchicalContainer实现,您可以在其中使用自己的ItemSorter实现。您可以扩展DefaultItemSorter并在比较两个元素时区分不同的情况:

  • 具有相同父级的两个叶元素:
    使用DefaultItemSorter.compare()
  • 具有相同父级的两个父元素(也为null):
    返回值以保持您想要的顺序
  • 指向根路径的元素:
    返回一个值,使更深的元素在更高的元素之后。
  • 两个元素具有相同的父级:
    在两条路径中,向上到树,直到找到下一个父母相同的深度并比较这两个元素。从更深层次的元素开始,直到你与另一个相同的水平。

我希望我没有忘记案件。无论如何,我建议你写几个单元测试,以确保你的ItemSorter在所有情况下做正确的事。

如果您知道树具有特殊特征,例如最大深度为2,则可以简化ItemSorter。我从你的问题中看不出来。请在下次添加更多详细信息。