我有一个多列的treetableview。我喜欢只按一列订购,所以我申请:
treetbvItems.getSortOrder().add("categoria");
此订单数据按“类别”按字母顺序排列,但我想应用我的自定义订单。
例如,如果类别可以是这个值中的一个:动物、计算机、鞋子、车辆......用上面的句子,我通过这种方式得到树顺序:
- 动物
- 电脑
- 鞋
- 车辆
但如果我想要(可以是任何其他自定义或其他):
- 电脑
- 鞋
- 动物
- 车辆
是否可以使用 JavaFX?
我有一个多列的treetableview。我喜欢只按一列订购,所以我申请:
treetbvItems.getSortOrder().add("categoria");
此订单数据按“类别”按字母顺序排列,但我想应用我的自定义订单。
例如,如果类别可以是这个值中的一个:动物、计算机、鞋子、车辆......用上面的句子,我通过这种方式得到树顺序:
但如果我想要(可以是任何其他自定义或其他):
是否可以使用 JavaFX?
我想你真的是说
TreeTableColumn<String> categoria ;
// ...
treebvItems.getSortOrder().add(categoria);
因为您发布的代码无法编译。
您可以通过在列上设置 aComparator
来控制特定列的排序。
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);
}
请注意,如果您有一组固定的类别,您可能应该使用 aEnum
而不是 a String
。an 的“自然”顺序Enum
由其声明顺序定义。