【问题标题】:javafx TableView: Why does the sortOrder listener does not fire when I sort descending?javafx TableView:当我降序排序时,为什么 sortOrder 侦听器不触发?
【发布时间】:2018-09-10 09:50:01
【问题描述】:

我有一个 javafx TableView,我想知道列的排序顺序何时发生变化。我在getSortOrder 方法中添加了一个监听器。但是,它仅在我对 升序 进行排序时触发,而在我对 降序 进行排序时不会触发。 为了测试这个我用了这个example code 有谁知道为什么这不会触发?我还需要添加其他东西吗?

表中的数据在SortedList中,我添加了如下监听器:

personTable.getSortOrder().addListener(this::onColumnSortOrderChanged);

 private void onColumnSortOrderChanged(ListChangeListener.Change<? extends TableColumn<Person, ?>> change) {
    boolean changed = false;
    while (change.next()) {
        changed = true;
    }
    if (changed) {
        if (change.getList().isEmpty()) {
            System.out.println("observable is empty");
        } else {
            TableColumn<Person, ?> column = change.getList().get(0);
            System.out.println("Sorted: " + column.getText() + " sort type " + column.getSortType());
        }
    }
}

【问题讨论】:

    标签: javafx observable javafx-tableview


    【解决方案1】:

    可以使用多列进行排序(例如,首先按姓氏对人进行排序,然后使用名字作为次要标准)。您可以按住 Shift 来添加多列。如果您在列的升序和降序排序之间进行更改,此列表不会更改。

    要监听这些更改,您需要监听 TableColumn.sortType 属性。

    // print sort order on change
    table.getSortOrder().addListener((Observable o) -> {
        System.out.println("sort order: "+ table.getSortOrder().stream().map(TableColumn::getText).collect(Collectors.joining(", ", "{", "}")));
    });
    
    // print sortType on change
    column.sortTypeProperty().addListener(o -> System.out.println("sortType changed to: " + column.getSortType()));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-16
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多