将SortedList比较器绑定到TableView比较器会删除sort

时间:2017-06-08 15:30:57

标签: java tableview javafx-8 sortedlist

我有一个SortedList来支持TableView中的数据。我想在查询数据库后按特定列对数据进行排序,但我想维护TableView的交互式排序功能。我的代码:

sortedData = new SortedList<>(data, new TableSort(sortIndex));
sortedData.comparatorProperty().bind(Table.comparatorProperty());
Table.setItems(sortedData);

但是,当我将SortedList比较器绑定到TableView时,我的原始比较器TableSort将被忽略,并且数据显示为未排序。如果我选择不绑定比较器,我的数据排序正确,但我无法执行交互式列排序。我怎样才能在这里获得两全其美?谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

因此,如果您想在将它们放入表格之前对它们进行排序,那么它非常简单。 我有一个类TestRow,用于保存表中的信息,并实现Comparable接口:

package stackoverflow;

import javafx.beans.property.SimpleStringProperty;

public class TestRow implements Comparable<TestRow> {

    private SimpleStringProperty name;
    private SimpleStringProperty age;

    public TestRow(String name, String age) {
        this.name = new SimpleStringProperty(name);
        this.age = new SimpleStringProperty(age);
    }

    public String getName() {
        return name.get();
    }

    public SimpleStringProperty nameProperty() {
        return name;
    }

    public String getAge() {
        return age.get();
    }

    public SimpleStringProperty ageProperty() {
        return age;
    }

    @Override
    public int compareTo(TestRow that) {
        return this.getName().compareTo(that.getName());
    }

}

然后在我的控制器中我只添加了两行:

TestRow first = new TestRow("Steve", "20");
TestRow second = new TestRow("Mike", "22");
ObservableList<TestRow> data = FXCollections.observableArrayList(Arrays.asList(first, second));

他们你只需拨打Collections.sort(data);,然后就可以完成剩下的部分了。

答案 1 :(得分:1)

致电

table.getSortOrder().add(sortColumn);

其中sortColumn是您希望初始排序的TableColumn