使用handler在javafx中基于列对数据进行排序

使用handler在javafx中基于列对数据进行排序,java,javafx,javafx-2,Java,Javafx,Javafx 2,如何在不单击列标题的情况下调用排序函数 当我点击表格标题时,记录被排序。但是我想在不点击表格标题的情况下对记录进行排序。是否可以为列标题添加处理程序,如果可以,我需要调用什么处理程序。您可以简单地修改和使用 例子 元素类型 构建TableView TableView tv=newtableview(FXCollections.observearraylist( 新元素(“a”、“a”), 新元素(“a”、“b”), 新元素(“b”、“a”), 新元素(“b”、“b”); TableColumn

如何在不单击列标题的情况下调用排序函数

当我点击表格标题时,记录被排序。但是我想在不点击表格标题的情况下对记录进行排序。是否可以为列标题添加处理程序,如果可以,我需要调用什么处理程序。

您可以简单地修改和使用

例子 元素类型 构建
TableView
TableView tv=newtableview(FXCollections.observearraylist(
新元素(“a”、“a”),
新元素(“a”、“b”),
新元素(“b”、“a”),
新元素(“b”、“b”);
TableColumn column1=新的TableColumn(“a”);
第1列:setCellValueFactory(新属性ValueFactory(“a”));
column1.setSortType(TableColumn.SortType.ASCENDING);
TableColumn column2=新的TableColumn(“b”);
第2列:setCellValueFactory(新属性ValueFactory(“b”);
column1.setSortType(TableColumn.SortType.DESCENDING);
tv.getColumns().setAll(第1列、第2列);
tv.getSortOrder().setAll(第1列、第2列);
//按钮在单击时反转列1的顺序
按钮btn=新按钮();
btn.setText(“反向列1”);
btn.setOnAction((ActionEvent事件)->{
column1.setSortType(相反(column1.getSortType());
});
...
私有静态TableColumn.SortType反向(TableColumn.SortType st){
返回TableColumn.SortType.values()[1-st.ordinal()];
}

如果要对非点击列标题触发的列进行排序,应触发排序的是什么?基于时间,是否应该对其进行排序?组合键。。。应该已经分类了。
public class Element {

    private final String a;
    private final String b;

    public Element(String a, String b) {
        this.a = a;
        this.b = b;
    }

    public String getA() {
        return a;
    }

    public String getB() {
        return b;
    }
}
    TableView<Element> tv = new TableView<>(FXCollections.observableArrayList(
            new Element("a", "a"),
            new Element("a", "b"),
            new Element("b", "a"),
            new Element("b", "b")));

    TableColumn<Element, String> column1 = new TableColumn<>("a");
    column1.setCellValueFactory(new PropertyValueFactory<>("a"));
    column1.setSortType(TableColumn.SortType.ASCENDING);

    TableColumn<Element, String> column2 = new TableColumn<>("b");
    column2.setCellValueFactory(new PropertyValueFactory<>("b"));
    column1.setSortType(TableColumn.SortType.DESCENDING);

    tv.getColumns().setAll(column1, column2);
    tv.getSortOrder().setAll(column1, column2);

    // Button reverses order of column1 on click
    Button btn = new Button();
    btn.setText("Reverse column 1");
    btn.setOnAction((ActionEvent event) -> {
        column1.setSortType(reverse(column1.getSortType()));
    });

...

private static TableColumn.SortType reverse(TableColumn.SortType st) {
    return TableColumn.SortType.values()[1-st.ordinal()];
}