Пользовательский порядок просмотра дерева

У меня есть treetableview с несколькими столбцами. Мне нравится заказывать только по одному столбцу, поэтому я применяю:

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

Эти данные заказа по столбцу «категория» в алфавитном порядке, но я хочу применить свой собственный порядок.

Например, если категория может быть одним из следующих значений: животные, компьютеры, обувь, транспортные средства... с приведенным выше предложением, я получаю древовидный порядок следующим образом:

  1. животные
  2. компьютеры
  3. туфли
  4. транспортные средства

но если я хочу (можно любой другой пользовательский или другой):

  1. компьютеры
  2. туфли
  3. животные
  4. транспортные средства

Можно или нельзя делать с JavaFX?


person Marcos    schedule 11.11.2014    source источник


Ответы (1)


Я предполагаю, что вы действительно имеете в виду

TreeTableColumn<String> categoria ; 
// ...

treebvItems.getSortOrder().add(categoria);

так как код, который вы разместили, не будет компилироваться.

Вы можете управлять порядком для определенного столбца с помощью установить Comparator в столбце.

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 определяется порядком его объявления.

person James_D    schedule 11.11.2014
comment
Хорошо, да, я пытаюсь использовать enum, потому что значения категорий берутся из БД. - person Marcos; 11.11.2014