0

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

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

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

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

  1. 动物
  2. 电脑
  3. 车辆

但如果我想要(可以是任何其他自定义或其他):

  1. 电脑
  2. 动物
  3. 车辆

是否可以使用 JavaFX?

4

1 回答 1

0

我想你真的是说

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由其声明顺序定义。

于 2014-11-11T15:19:54.727 回答