javafx:默认情况下对TableView进行排序

时间:2016-07-07 23:30:05

标签: java sorting javafx tableview

我正在开发一款由javafx TableView显示的高分榜单的小游戏。我创建了一个子类HighscoreTableView extends TableView,它是一个TableView节点,可以自动创建我需要的TableColumns并填充构造数据。

我希望该表在初始化时按默认列排序。我添加了以下代码行:

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

其中duration是应该定义排序的TableColumn。当然,它被添加到TableView。但是当我创建HighscoreTableView的新实例时,默认情况下它仍然未排序,直到用户单击其中一个列标题。这是意料之外的,因为this questionthis questionthis question说它应该以这种方式工作。有什么想法吗?

有关复制的更多信息: HighscoreTableView类使用HighscoreStage extends Stage类,其中包含带有四个制表符的TabPane。每个选项卡都包含一个HighscoreTableView,其中包含从静态Data对象获取的不同数据。数据模型是一个类HighscoreEntry,其中ObservableList被添加到HighscoreTableView。我的完整代码可用here

1 个答案:

答案 0 :(得分:2)

在加载任何数据之前,您正在调用sort()。相反,您应该在每次将数据添加/更改到表视图后调用它。 您还可以使用SortedList和适当的比较器来包装原始支持列表。比所有更改都会自动传播到视图。