我有一个多列的treetableview。我只想按一栏订购,所以我申请:
treetbvItems.getSortOrder().add("categoria");
此订单数据按列“categoria”按字母顺序排列,但我想应用自定义订单。
例如,如果类别可以是这些值中的一个:动物,计算机,鞋子,车辆......上面的句子,我通过这种方式获得树顺序:
但如果我想(可以是任何其他自定义的):
是否可以使用JavaFX?
答案 0 :(得分:0)
我认为你的意思是
TreeTableColumn<String> categoria ;
// ...
treebvItems.getSortOrder().add(categoria);
因为您发布的代码无法编译。
您可以按setting a Comparator
on the column控制特定列的排序。
Comparator
定义compareTo(String, String)
方法,如果第一个参数位于第二个参数之前,则返回负int
,如果第二个参数位于第一个参数之前,则返回正int
,如果它们相等则为0。
所以你可以这样做:
categoria.setComparator((cat1, cat2) -> {
if (cat1.equals(cat2)) {
return 0 ;
}
if ("computers".equals(cat1)) {
return -1 ;
}
if ("computers".equals(cat2)) {
return 1 ;
}
if ("shoes".equals(cat1)) {
return -1 ;
}
if ("shoes".equals(cat2)) {
return 1 ;
}
if ("animals".equals(cat1)) {
return -1 ;
}
if ("animals".equals(cat2)) {
return 1 ;
}
throw new IllegalArgumentException("Unknown categories: "+cat1+", "+cat2);
}
请注意,如果您有一组固定的类别,则应该使用Enum
而不是String
。 Enum
的“自然”顺序由其声明顺序定义。