我尝试按某列排序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/
的链接之一有人可以为我愚蠢吗?
答案 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();