我有一个SortedList来支持TableView中的数据。我想在查询数据库后按特定列对数据进行排序,但我想维护TableView的交互式排序功能。我的代码:
sortedData = new SortedList<>(data, new TableSort(sortIndex));
sortedData.comparatorProperty().bind(Table.comparatorProperty());
Table.setItems(sortedData);
但是,当我将SortedList比较器绑定到TableView时,我的原始比较器TableSort
将被忽略,并且数据显示为未排序。如果我选择不绑定比较器,我的数据排序正确,但我无法执行交互式列排序。我怎样才能在这里获得两全其美?谢谢你的帮助。
答案 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
。