2015-08-19 61 views
2

...其中TTableView的通用類型。JavaFx - TableView:如何使用自定義比較器<T>進行排序?

到目前爲止,我正在實現一個包含三列的文件列表視圖。每種類型java.nio.file.Path。對於名稱列,我寫了一個Comparator<Path>,它將文件與目錄排序 - 第一和不區分大小寫。其他兩個比較器按最後修改時間和文件大小進行排序。爲此,他們比較long字段。

但是列的comparatorProperty基於Comparator<String>。我認爲,根據顯示的文字排序...

所以我必須找到一種方法,使用TableView類型的按頭排序功能進行排序?

+2

你可以張貼一些代碼?我不明白你的'TableView'和'TableColumn'的類型是什麼。 'TableView ','TableColumn ','TableColumn ','TableColumn '將是明顯的選擇,但這些看起來不符合您的描述。 –

+0

看起來像你只是誤讀api文件...看不到比較器,它是[比較器](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/控制/ TableColumnBase.html#comparatorProperty)與T是列數據的類型:-) – kleopatra

+0

你是對的。我錯誤地理解了'''TableColumnBase '''中'''T'''參數的描述。所以我使用'''TableColumn '',而不是''TableColumn ''',例如。在我改變了這個之後,我可以使用'''Comparator '''。謝謝。 :) –

回答

2

創建TableColumn時,使用錯誤的類型參數。如果您創建了TableColumn<Path, Path>,則可以爲該列指定Comparator<Path>。同樣TableColumn<Path, FileTime>TableColumn<Path, Long>使用Comparator<FileTime>Comparator<Long>

從文檔:

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. 
相關問題