按某些列Javafx对TableView进行排序

时间:2016-03-26 19:52:01

标签: javafx

我尝试按某列排序TableView table。当我显示表格时,它已经显示,但是我在这里和其他网站上发现的内容让我越来越困惑。

这是tableview代码

public TableView<Animal> animalLostLocation(ArrayList<Animal> list)
    {

        TableColumn<Animal, String> atypeColumn = new TableColumn<>("Animal Type");
        atypeColumn.setMinWidth(200);
        atypeColumn.setSortable(false);
        atypeColumn.setCellValueFactory(new PropertyValueFactory<>("aType"));

        TableColumn<Animal, String> descriptionColumn = new TableColumn<>("Description");
        descriptionColumn.setMinWidth(200);
        descriptionColumn.setSortable(false);
        descriptionColumn.setCellValueFactory(new PropertyValueFactory<>("description"));

        TableColumn<Animal, String> breedColumn = new TableColumn<>("Breed");
        breedColumn.setMinWidth(80);
        breedColumn.setSortable(false);
        breedColumn.setCellValueFactory(new PropertyValueFactory<>("breed"));

        TableColumn<Animal, String> nameColumn = new TableColumn<>("Name");
        nameColumn.setMinWidth(200);
        nameColumn.setSortable(false);
        nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));

        TableColumn<Animal, Catergory> catColumn = new TableColumn<>("Category");
        catColumn.setMinWidth(200);
        breedColumn.setSortable(false);
        catColumn.setCellValueFactory(new PropertyValueFactory<>("category"));

        TableColumn<Animal, Integer > ageColumn = new TableColumn<>("Age");
        ageColumn.setMinWidth(50);
        ageColumn.setSortable(false);
        ageColumn.setCellValueFactory(new PropertyValueFactory<>("age"));

        TableColumn<Animal, Integer > idColumn = new TableColumn<>("ID");
        idColumn.setMinWidth(50);
        idColumn.setCellValueFactory(new PropertyValueFactory<>("ID"));

        TableColumn<Animal, Boolean > genColumn = new TableColumn<>("Male");
        genColumn.setMinWidth(50);
        genColumn.setSortable(false);
        genColumn.setCellValueFactory(new PropertyValueFactory<>("gender"));

        table = new TableView<Animal>();

        table.setItems(getAnimal(list));

        table.getColumns().addAll(genColumn, idColumn, nameColumn, atypeColumn, ageColumn, breedColumn, descriptionColumn, catColumn);
        return table;
    }

我想最初按性别对表格进行排序。

据我所知,我必须创建SortedList / FilteredList,但我在网上找到的教程让我更加困惑。

我必须使用SortedList / FilteredList还是有更好的选择?

这是我找到http://code.makery.ch/blog/javafx-8-tableview-sorting-filtering/

的链接之一

有人可以为我愚蠢吗?

2 个答案:

答案 0 :(得分:10)

无需自行创建排序列表。只需添加列即可按sortOrder list of your TableView

排序
table.getSortOrder().add(genColumn);

根据列中显示的类型,您可能还希望将比较器设置为自己使用(see TableColumnBase.comparatorProperty

这种方法的好处是可以使用用户交互提供的排序(单击列标题),而不是排序后备列表(或使用列表的“排序视图”,这是SortedList所做的)。

答案 1 :(得分:3)

我使用了公认的答案使之起作用,但我想分享一个完整的解决方案。

在这种情况下,我在排序之前向表提供了数据。设置要排序的列的排序类型,将该列添加到排序顺序,然后在要对表进行排序的任何地方调用sort()方法。

myColumn.setSortType(TableColumn.SortType.DESCENDING);
myTableView.getSortOrder().add(myColumn);
myTableView.sort();