Как переименовать узел в jtree

#java #swing #jtree

#java #swing #jtree

Вопрос:

Я создаю Jtree, чтобы все его узлы имели объект User, я заполняю объект user классом ItemInfo, теперь моя проблема заключается в переименовании узла. Я могу отредактировать свой узел, но поскольку я пытаюсь найти свой пользовательский объект, я увидел, что когда я нажимаю F2 и переименовываю свой узел, в моем пользовательском объекте появляется новое имя!

Итак, теперь я хочу знать, что я должен коснуться, где заменить новое имя моего узла на предыдущее имя вручную?

Я думаю, мне нужно написать свой собственный класс DefaultTreeCellRenderer, пожалуйста, посоветуйте мне… (если да, то какой-нибудь пример для моей справки)

 public class ItemInfo {
    public String Name;
    public String Value;
    public long ValueID;


    public ItemInfo(String Name, String Value) {
        this.Name = Name;
        this.Value = Value;
    }

    public ItemInfo(String Name, long ValueID) {
        this.Name = Name;
        this.ValueID = ValueID;
    }

    public String toString() {
        return Name;
    }

    public String getValue() {
        return Value;
    }

    public long getValueID() {
        return ValueID;
    }
}
  

Ответ №1:

Вы добавляете, TreeModelListener как описано в этом руководстве? В прослушивателе вы можете получать уведомления, если узел был изменен, и обновлять его пользовательский объект.

РЕДАКТИРОВАТЬ: Смотрите DefaultTreeModel.valueForPathChanged javadoc:

Это устанавливает пользовательский объект TreeNode, идентифицируемый путем, и публикует измененный узел. Если вы используете пользовательские объекты в TreeModel, вам нужно будет подклассировать это и присвоить объекту user измененного узла значение чего-то значимого.

Переопределите этот метод и обновите свой объект новым именем узла.

Комментарии:

1. Да, вы правы, я реализую treeNodesChanged, но проблема в том, что когда я проверяю свой узел, он уже заменен новым объектом. Я имею в виду, что раньше на этом узле UserObject заполнялся моим объектом, но теперь он заменяется просто строкой (новое имя узла)! Я хочу знать, где произойдут эти изменения? или как я могу сохранить свой предыдущий узел

2. но не могли бы вы рассказать мне, как вы находите это решение? погуглив? предыдущий опыт?

3. @rima: Я раньше не использовал редактируемые деревья, я просматривал исходный код swing, чтобы найти, где происходит изменение, и нашел этот метод. IDE очень помогла в этом случае (я использую IntelliJ IDEA).