【问题标题】:JavaFx - TableView: How to use custom Comparator<T> for sorting?JavaFx - TableView:如何使用自定义 Comparator<T> 进行排序?
【发布时间】:2015-08-19 01:46:29
【问题描述】:

...其中TTableView 的泛型类型。

到目前为止,我正在实现一个包含三列的文件列表视图。每个类型java.nio.file.Path。对于名称列,我写了一个Comparator&lt;Path&gt;,它使用目录优先和不区分大小写对文件进行排序。其他两个比较器按上次修改时间和文件大小排序。为此,他们在long 字段上进行比较。

但列的comparatorProperty 是基于Comparator&lt;String&gt;。我认为,根据显示的文本进行排序......

所以我必须找到一种方法,使用 TableView 类型的 sort-on-header-click 功能?

【问题讨论】:

  • 你能贴一些代码吗?我真的不明白你的TableViewTableColumns 的类型是什么。 TableView&lt;Path&gt;TableColumn&lt;Path, Path&gt;TableColumn&lt;Path, FileTime&gt;TableColumn&lt;Path, Long&gt; 是显而易见的选择,但这些似乎与您的描述不符。
  • 看起来您只是误读了 api 文档...看不到比较器,它是 comparator<T>,其中 T 是列数据的类型 :-)
  • 你们说的都对。我误解了TableColumnBase&lt;S, T&gt;T参数的描述。所以我有TableColumn&lt;Path, String&gt;,而不是TableColumn&lt;Path, Path&gt;,例如。更改此设置后,我可以使用Comparator&lt;Path&gt;。谢谢你。 :)
  • 您可以考虑回答并接受您自己的问题 - 未来的读者更容易找到解决方案 :-)

标签: java sorting javafx tableview javafx-8


【解决方案1】:

您在创建TableColumn 时使用了错误的类型参数。如果创建TableColumn&lt;Path, Path&gt;,则可以为该列指定Comparator&lt;Path&gt;。同样TableColumn&lt;Path, FileTime&gt;TableColumn&lt;Path, Long&gt; 使用Comparator&lt;FileTime&gt;Comparator&lt;Long&gt;

来自文档:

Class TableColumnBase<S,T>
Type Parameters:
S - The type of the UI control (e.g. the type of the 'row').
T - The type of the content in all cells in this table column.

【讨论】:

    猜你喜欢
    • 2021-09-18
    • 1970-01-01
    • 2018-11-04
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    相关资源
    最近更新 更多