Выделение определенных узлов в jtree в зависимости от данных, хранящихся в узле
У меня есть приложение, которое отображает jTree. Каждый узел в дереве имеет логическое поле с именем flagged
который указывает, требует ли он внимания от пользователя.
Если поле true
тогда я бы хотел чтобы он был выделен красным, иначе подсветка не будет.
Какой хороший способ сделать это? Должен ли я продлить DefaultTreeCellRenderer
? Реализуй свой собственный кастом TreeCellRenderer
? Какой-то другой метод?
1 ответ
Решение
Поскольку пользовательский рендеринг, который вы хотите сделать, довольно прост, я бы просто расширил DefaultTreeCellRenderer
и переопределить его getTreeCellRendererComponent
метод. Вы можете просто настроить цвет переднего плана на JLabel
что DefaultTreeCellRenderer
использует. Вот быстрый пример:
tree.setCellRenderer(new DefaultTreeCellRenderer() {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded,
boolean leaf, int row, boolean hasFocus) {
JLabel label = (JLabel)super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
YourNode node = (YourNode)value;
if (node.isFlagged())
label.setForeground(Color.RED);
return label;
}
});
И результат: