如何使JXTreeTable排序其顶级元素

ixM*_*ixM 8 java swing jtable swingx jxtreetable

我知道(我已查看过这些来源;))已禁用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
.
.
.
Run Code Online (Sandbox Code Playgroud)

我想要实现的是仅在第一级节点上对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
.
.
.
Run Code Online (Sandbox Code Playgroud)

正如我所看到的,它适用于简单的表排序(因此解除了为禁用排序而调用的层次结构限制).

我看到有两种可能性:

  1. 重新启用JXTable中可用的排序机制,以便从已经实现的所有内容中获益(排序器,通过单击标题排序,...),并且只对第一级的节点进行排序(因为他们的子节点仍然具有相同的父节点) .
  2. 实现我需要的基本内容(主要通过点击标题进行排序),在JXSortableTreeModel中有一个模型行ID的列表,我对它进行排序和覆盖convertRowIndexToModel,这将允许(我认为)按我的意愿显示我的项目.

我最喜欢的当然是第一个,但我不知道如何实现它.第一个限制是我不知道如何重新启用排序,因为JXTreeTable重写了setSortable()(和所有相关的方法),我不知道如何直接访问JXTable中的方法实现(这是一个Java问题).我可以简单地复制JXTreeTable的代码并删除覆盖,但在我看来这不是一个选项.

假设我解决了这个问题,我如何限制排序到第一级节点?即使在查看来源之后,我对如何做到这一点仍然毫无头绪.

对于第二个,我放弃了现有代码的所有好处,但我看到了实现我想要的实用方法(至少现在,至少.谁知道是否不想过滤所有行上的数据?).

还有其他方法吗?如果没有,我应该选择哪一种解决方案?任何有见地的评论?

提前谢谢了!

mKo*_*bel 3

也许按照 aephyr 的方式对 TreeTable 进行排序,顺便说一句,这位 Swing Guru 也玩过 Nimbus 外观和感觉,包括有趣的 Nimbus 代码

在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述