自定义treetableview订单

时间:2014-11-11 15:04:19

标签: javafx treetableview

我有一个多列的treetableview。我只想按一栏订购,所以我申请:

treetbvItems.getSortOrder().add("categoria");

此订单数据按列“categoria”按字母顺序排列,但我想应用自定义订单。

例如,如果类别可以是这些值中的一个:动物,计算机,鞋子,车辆......上面的句子,我通过这种方式获得树顺序:

  1. 动物
  2. 计算机
  3. 车辆
  4. 但如果我想(可以是任何其他自定义的):

    1. 计算机
    2. 动物
    3. 车辆
    4. 是否可以使用JavaFX?

1 个答案:

答案 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而不是StringEnum的“自然”顺序由其声明顺序定义。