javafx:默认排序TableView
我正在开发一个小游戏,它有一个由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 question和this question表示它应该这样工作。有任何想法吗?
用于再现进一步的信息: 的HighscoreTableView
类由一个HighscoreStage extends Stage
类,其中包含与四个标签一个TabPane
。每个选项卡包含一个HighscoreTableView
,其中包含从静态Data
对象获取的不同数据。数据模型是一个类HighscoreEntry
,其中一个ObservableList
被添加到HighscoreTableView
s。我的完整代码可用here。
在加载任何数据之前,您正在致电sort()
。相反,您应该在每次向表格视图添加/更改数据后调用它。 您也可以使用SortedList
与适当的比较器来包装您的原始支持列表。比所有更改都会自动传播到视图。
谢谢,解决了! – LukeLR
我相信为排序工作在TableView的'items'属性中的列表必须是一个'SortedList','comparator'属性绑定到TableView的一个。这大概是初始值的情况,但你重置它。尝试将'this.setItems(list.getObservableList());'改为'this.getItems()。clear;'后面跟'this.getItems()。addAll(list);' – Itai