【问题标题】:javafx: sort TableView by defaultjavafx:默认排序 TableView
【发布时间】:2016-07-08 14:33:11
【问题描述】:

我正在开发一个小游戏,它的高分列表由 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 被添加到HighscoreTableViews。我的完整代码可用here

【问题讨论】:

  • 我相信要进行排序,TableView 的items 属性中的列表必须是SortedListcomparator 属性绑定到 TableView 之一。这大概是初始值的情况,但是您将其重置。尝试将 this.setItems(list.getObservableList()); 更改为 this.getItems().clear; 后跟 this.getItems().addAll(list);

标签: java sorting javafx tableview


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多