如何对NatTable中的每一列使用不同的比较器对TreeList进行排序

时间:2019-06-03 18:12:50

标签: java nattable nebula glazedlists

我正在使用NatTable来显示具有多列的树。将该树展平为用于创建TreeList的SortedList。

EventList<Person> eventList = GlazedLists.eventList(perfStats.getFlattenedTree());
TransformedList<Person, Person> rowObjectsGlazedList = GlazedLists.threadSafeList(eventList);
SortedList<Person> sortedList = new SortedList<(rowObjectsGlazedList, null);
TreeList treeList = new TreeList(sortedList, treeFormat, TreeList.nodesStartCollapsed());

这可以显示树。但是,现在我的问题是如何正确排序?

理想的结果是对根进行正确的排序,然后对内部的子项进行独立的正确排序,依此类推。

现在,我使用的是GlazedListsSortModel,它对扁平化的树进行排序,然后从无效的树中构建显示。

任何帮助或只是向我指出正确的方向,将不胜感激!

1 个答案:

答案 0 :(得分:0)

使用TreeList时,您通过Comparator为树结构传递了TreeList#Format。这是为了确保树是正确创建的,因为它是从List派生的。因此,即使通过SortedList进行了排序,Comparator中的TreeList#Format最终还是会获胜。

要解决您的要求,因此您需要实现一个考虑到列排序的TreeList#Format。例如,可以通过使用NatTable SortableTreeComparator来完成此操作。您可以查看我们的TreeGridExample,以了解其外观。

可以在GroupByComparator中看到一个更扩展的版本,该版本用于支持具有GroupBy功能的按列排序。