データベースから取り込まれた JTree を使用しています。
ツリーは、ルート ノードとその子ノードにカスタム オブジェクトを次のように設定することで作成されます。
private DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Categorias");
...
ResultSet primaryCategories = dbm.fetchAllCategories();
while (primaryCategories.next()){
Category category = new Category(primaryCategories.getLong("_id"),
primaryCategories.getString("category"));
DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(category);
rootNode.add(childNode);
ResultSet currentSubcategory = dbm.fetchChildSubcategories(category.getCatId());
while (currentSubcategory.next()){
Category subcategory = new Category(currentSubcategory.getLong("_id"),
currentSubcategory.getString("category"));
childNode.add(new DefaultMutableTreeNode(subcategory, false));
}
}
...
この後、ツリーは完全に作成されます。" Category " オブジェクトが取り込まれ、すべてのオブジェクトには独自の ID 番号と toString() メソッドで使用する名前があります。
問題は、編集可能に設定したときに発生します。ノードの名前が変更されると、カテゴリノードも文字列オブジェクトに変換されるため、新しいカテゴリ名の値をデータベースに更新できません。
名前変更イベントをキャプチャしようとしましたtreeNodesChanged(TreeModelEvent e)
が、userObject は既に String オブジェクトに変更されており、編集されたオブジェクトの参照を取得できません。
これをどのように解決できますか?表示されているツリーのコピーと、データベースからダウンロードした別のツリーのコピーを用意し、変更が発生するたびに両方を更新する必要がありますか?
* PD: * また、メソッドをオーバーライドするモデルから変更されたノードを取得しようとしました:
public void nodeChanged(TreeNode newNode) {
DefaultMutableTreeNode parent = ((DefaultMutableTreeNode)newNode.getParent());
int index = getIndexOfChild(parent, newNode);
DefaultMutableTreeNode oldNode = (DefaultMutableTreeNode) getChild(parent, index);
System.out.println(parent.getUserObject().getClass().toString());
System.out.println(oldNode.getUserObject().getClass().toString());
}
これは次のように表示されます:
class com.giorgi.commandserver.entity.Category
class java.lang.String
したがって、ここの古いノードはすでに文字列に変更されており、古いカテゴリとその ID への参照が完全に失われたため、データベースで更新できません。
どんな助けでも大歓迎です。