#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).