我正在开发一款由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 question,this question和this question说它应该以这种方式工作。有什么想法吗?
有关复制的更多信息:
HighscoreTableView
类使用HighscoreStage extends Stage
类,其中包含带有四个制表符的TabPane
。每个选项卡都包含一个HighscoreTableView
,其中包含从静态Data
对象获取的不同数据。数据模型是一个类HighscoreEntry
,其中ObservableList
被添加到HighscoreTableView
。我的完整代码可用here。
答案 0 :(得分:2)
在加载任何数据之前,您正在调用sort()
。相反,您应该在每次将数据添加/更改到表视图后调用它。
您还可以使用SortedList
和适当的比较器来包装原始支持列表。比所有更改都会自动传播到视图。