Как вызвать DefaultTreeCellRenderer для определенных узлов в JTree

У меня есть индивидуальные DefaultTreeCellRenderer это отключает узлы в JTree.

Вот его код:

static class CustomDefaultTreeCellRenderer extends DefaultTreeCellRenderer{
        @Override
        public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus)
        {
            boolean enabled = true; // <-- here is the logic for enable/disable cell


            Component treeCellRendererComponent = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
            treeCellRendererComponent.setEnabled(enabled);
            return treeCellRendererComponent;

        }
}

Но я не могу использовать его в своем коде. Я не могу иметь метод или что-то, чтобы вызвать его там, где мне это нужно. Например, когда кнопка нажата или когда элемент имеет определенное имя.

Вот пример того, что мой метод просматривает модель и находит узел, соответствующий строке дающего.

protected void walk(TreeModel model, Object o, String word){
    int  cc;
    cc = model.getChildCount(o);
    for( int i=0; i < cc; i++) {
      Object child = model.getChild(o, i);
      if (model.isLeaf(child) && child.toString().equals(word)){
        System.out.println(child);
        // HERE I NEED TO MAKE "child" DISABLED 
      }
      else {
        walk(model,child, word); 
        }
     }
}

Вот как я установил CustomDefaultTreeCellRenderer к моему дереву:

tree.setCellRenderer(new CustomDefaultTreeCellRenderer());

И это пример моего метода ходьбы:

walk(tree.getModel(), tree.getModel().getRoot(), "DS.png");

Так есть идеи, как отключить конкретный узел?

1 ответ

Решение

Инфраструктура Swing контролирует, когда TreeCellRenderer вызывается для узла; Вы не можете это контролировать. Вам нужно проверить необходимое условие (например, имя узла) внутри вашего CustomDefaultTreeCellRenderer. Просто не вызывайте setEnabled(), если узел не нужно отключать.

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