我知道(我已经查看了来源;))JXTreeTable 上的排序已被禁用。
但是,我希望允许仅根据根节点的直接子节点的值对所有列进行排序。
假设我有这样的结构:
Name / Date / File UID
(Root)
|- Mr. X / 1996/10/22 / AE123F6D
|--- File1 / 2012/01/10 / DFC2345Q
|--- File2 / 2012/01/11 / D321FEC6
|- Mrs. Y / 1975/03/03 / G2GF35EZ
|--- File3 / 2012/02/29 / 35GERR32
|--- File4 / 2012/01/22 / LKJY2342
.
.
.
我想要实现的是仅在第一级节点上对 3 列进行排序。假设我想按日期升序排序,结果会是这样的:
Name / Date / File UID
(Root)
|- Mrs. Y / 1975/03/03 / G2GF35EZ
|--- File3 / 2012/02/29 / 35GERR32
|--- File4 / 2012/01/22 / LKJY2342
|- Mr. X / 1996/10/22 / AE123F6D
|--- File1 / 2012/01/10 / DFC2345Q
|--- File2 / 2012/01/11 / D321FEC6
.
.
.
在我看来,它类似于简单的表排序(因此解除了为禁用排序而调用的分层限制)。
我看到有两种可能性:
- 重新启用 JXTable 中可用的排序机制,以从已实现的所有内容中受益(排序器、通过单击标题进行排序...)并且仅对第一级节点进行排序(因为它们的子节点仍具有相同的父节点) 。
- 实现我需要的基本内容(主要通过单击标题进行排序),在 JXSortableTreeModel 中有一个 model-row-id 列表,我可以对其进行排序并覆盖 ConvertRowIndexToModel,这将允许(我认为)显示按我想要的方式排序的项目。
我最喜欢的当然是第一个,但我不知道如何实现它。第一个限制是我不知道如何重新启用排序,因为 JXTreeTable 重写了 setSortable() (以及所有相关方法),并且我不知道如何直接访问 JXTable 中该方法的实现(这是一个 Java 问题) )。我可以简单地复制 JXTreeTable 的代码并删除覆盖,但我认为这不是一个选项。
假设我解决了这个问题,我将如何将排序限制为第一级节点?即使在查看了来源之后,我仍然对如何做到这一点一无所知。
对于第二个,我失去了现有代码的所有好处,但我看到了一种实现我想要的实用方法(至少现在是这样。谁知道是否不想过滤所有行上的数据?)。
还有别的路可走吗?如果不是,我应该选择哪一种解决方案?有什么有见地的评论吗?
提前谢谢了!