2016-07-07 204 views
0

我正在開發一個小遊戲,它有一個由javafx TableView顯示的高分列表。我創建了一個子類HighscoreTableView extends TableView這是一個TableView節點,它會自動創建我需要的TableColumns並用它們填充結構數據。javafx:默認排序TableView

我希望該表在初始化時按默認列排序。我添加了以下代碼行:

duration.setSortType(TableColumn.SortType.DESCENDING); 
this.getSortOrder().add(duration); 
duration.setSortable(true); 
this.sort(); 

其中duration是TableColumn應該定義排序。當然,它被添加到TableView。但是,當我創建HighscoreTableView的新實例時,它默認保持未排序,直到用戶單擊其中一個列標題。這是意想不到的,因爲this question,this questionthis question表示它應該這樣工作。有任何想法嗎?

用於再現進一步的信息:HighscoreTableView類由一個HighscoreStage extends Stage類,其中包含與四個標籤一個TabPane。每個選項卡包含一個HighscoreTableView,其中包含從靜態Data對象獲取的不同數據。數據模型是一個類HighscoreEntry,其中一個ObservableList被添加到HighscoreTableView s。我的完整代碼可用here

+0

我相信爲排序工作在TableView的'items'屬性中的列表必須是一個'SortedList','comparator'屬性綁定到TableView的一個。這大概是初始值的情況,但你重置它。嘗試將'this.setItems(list.getObservableList());'改爲'this.getItems()。clear;'後面跟'this.getItems()。addAll(list);' – Itai

回答

2

在加載任何數據之前,您正在致電sort()。相反,您應該在每次向表格視圖添加/更改數據後調用它。 您也可以使用SortedList與適當的比較器來包裝您的原始支持列表。比所有更改都會自動傳播到視圖。

+0

謝謝,解決了! – LukeLR