Выделение определенных узлов в 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;
  }
});

И результат:

Другие вопросы по тегам