我知道(我已经查看了源代码;))已经禁用了对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中有一个模型行ID的列表,我对它进行排序和覆盖convertRowIndexToModel,它允许(我认为)按我的意愿显示我的项目.
我最喜欢的当然是第一个,但我不知道如何实现它.第一个限制是我不知道如何重新启用排序,因为JXTreeTable重写了setSortable()(和所有相关的方法),我不知道如何直接访问JXTable中的方法实现(这是一个Java问题).我可以简单地复制JXTreeTable的代码并删除覆盖,但在我看来这不是一个选项.
假设我解决了这个问题,我如何限制排序到第一级节点?即使在查看源代码之后,我对如何做到这一点也很无能为力.
对于第二个,我放弃了现有代码的所有好处,但我看到了实现我想要的实用方法(至少现在,至少.谁知道是否不想过滤所有行上的数据?).
还有其他方法吗?如果没有,我应该选择哪一种解决方案?任何有见地的评论?
提前谢谢了!