2016-07-07 117 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