可编辑的JTree将树节点转换为字符串

时间:2012-10-10 21:42:35

标签: java swing jtree

我正在使用从数据库填充的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));
    }
}
...

在此之后,完美地创建了树。填充“类别”对象,每个对象都有自己的ID号及其名称,以便在toString()方法中使用。

当它设置为可编辑时出现问题。重命名节点后,类别节点也会转换为 String 对象,因此我无法将新的类别名称值更新到数据库。

我尝试使用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

所以这里的旧节点已经被改为String了,我完全丢失了对旧类别及其ID的引用,所以我无法在数据库中更新它。

任何帮助都很好。

0 个答案:

没有答案