【问题标题】:Java Swing: Forcing certain items to the end of a sorted JTableJava Swing:强制某些项目到已排序 JTable 的末尾
【发布时间】:2011-12-14 00:37:54
【问题描述】:

如何强制某些表行位于已排序 JTable 的末尾?例如,如果有人单击列标题以按该列进行排序,那么无论排序顺序如何,我都有一些我总是希望位于表末尾的行。我将如何实现这一目标?

谢谢!

【问题讨论】:

  • 您的 JTable 是如何设置的?是否有在后台运行的自定义 TableModel,或者您使用 DefaultTable Model?
  • 好吧,要创建 JTable,您需要将对象数组传递给构造函数,对吗?如果你实现了一个排序方法,使最后的行不排序,然后你触发它,你可能可以实现你想要的功能。
  • 使用 RowSorter 和自定义比较器可以很容易地解决这个问题。有关更多信息,请参阅here。没有一些代码,我们无法提供具体的答案。
  • @jjiceman 决定将评论移至 not-an-answer - 编写和编辑更舒适 :-)

标签: java swing jtable


【解决方案1】:

注意:这不是答案,只是对困难和一些链接的一种总结。

这是难以解决的任务之一。支持它的核心中没有任何东西(甚至在 SwingX 中也没有 :-)。特别是, Comparator 没有帮助,因为它不知道排序方向的任何内容,即它不知道它应该将特定行定位在顶部还是底部。唯一能够这样做的合作者可能是 RowSorter。由于 DefaultRowSorter 中的所有内容都被紧紧隐藏,因此调整归结为完全重新实现。在 OTN 上以 handle nulls had been published by Walter Laanlater described to be tweaked 为更复杂的上下文的示例。

【讨论】:

  • +1 用于透视这一点。没想到实现会这么麻烦。
  • @kleopatra 请查看stackoverflow.com/questions/6187566/… 中列出的错误(由 Andrew Thompson 编写),确保有很多...
  • @mKorbel 不,这完全不相关——因为没有任何关系
【解决方案2】:

你既可以实现Comparator接口,如How to Use Tables: Sorting and Filtering所示,也可以实现Comparable接口,如这个example的类Value所示。在任何一种方法中,您都可以更改比较方法的结果,使所需的行出现在所有其他行之后。

附录:正如@kleopatra 的answer 所述,Comparator 必须在表的RowSorter 的上下文中应用,而Comparable 的实现会影响natural ordering。由于结果令人费解且难以维护,您可能需要考虑另一种方法。

【讨论】:

  • 决定将评论移至 not-an-answer - 编写和编辑更舒适 :-)
猜你喜欢
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 2014-02-15
  • 1970-01-01
  • 2011-11-29
相关资源
最近更新 更多