JXTreeTable: сохранить набор выделенных строк

У меня есть набор строк с некоторыми интересными данными. Мне нужно указать пользователю на них.

1. Так что я могу сохранить номера строк и выделить их с помощью маркера. Но когда я разворачиваю/сворачиваю дерево, номера строк меняются и подсветка этих строк смещается на другую, неинтересную;
2. Я могу использовать множественный выбор, чтобы выбрать все эти строки, а затем предотвратить выбор (перехватить событие выбора), чтобы не сбросить выбор. Но предотвращать выделение - плохая идея...;
3. Для решения проблемы первого варианта можно попробовать отслеживать количество развернутых/свернутых элементов. Но в данном случае меня остановил случай, когда мы сворачиваем многослойное развернутое поддерево. Я не знаю, как узнать, сколько строк действительно удалено;
4. Я не хочу обходить все дерево и проверять значения данных.

Мне нужно как-то реализовать тот же механизм, который используется для выделения: мы сворачиваем/расширяем строки, но выделение фиксируется. Но я не знаю, как это сделать.


person DrDecay    schedule 15.07.2015    source источник


Ответы (1)


Как упоминалось в этом вопросе, при создании HighlightPredicate нет необходимости сосредотачиваться на индексе строки. Просто проверьте значения, которые могут быть интересны.

final JXTreeTable treeTable = new JXTreeTable();
final int interestingColumn = 3;
final Color interestingCellBackgroundColor = Color.GREEN;
final Color interestingCellForegroundColor = Color.BLACK;
treeTable.addHighlighter(new ColorHighlighter(new HighlightPredicate() {
        public boolean isHighlighted(Component rend, ComponentAdapter adapt) {
            Object value = adapt.getValue(interestingColumn);
            return isValueInteresting(value));
        }
    }, interestingCellBackgroundColor, interestingCellForegroundColor));
person Carsten    schedule 22.07.2015