索引JTree节点

时间:2011-06-10 12:47:58

标签: java swing jtree

我想在添加新节点时为JTree的每个节点创建一个索引(1,1.2,1.3,2.1等),

root
|
 ---1 node
|
 ---2 node
    |
     ---2.1 node 

有人知道我该怎么办吗?提前感谢您的任何答案。

3 个答案:

答案 0 :(得分:2)

在添加节点时,查找该级别中的当前节点数,并且新节点的索引是计数加1。

答案 1 :(得分:1)

对于复杂的UI组件,最好区分数据模型和渲染。 因此,我建议你实现一个TreeModel,它返回例如Nodes对象,它可以包含它的级别的整数,你还可以实现一个TreeCellRenderer,它可以渲染节点。

可以使用父节点在每次渲染时计算索引,可以询问该信息的模型可以将其缓存到节点中。 您可以在这里查看如何实现自定义TreeModel:http://download.oracle.com/javase/tutorial/uiswing/components/tree.html#data

如果在单击父节点时需要执行操作,可以使用Tree-Will-Expand侦听器(也在教程中引用)

答案 2 :(得分:1)

由于您没有告诉我们,如果您已经实现了自己的TableModel,我假设您使用标准JTree和默认模型。将节点的索引检索为String的方法如下所示:

public String getNodeIndex(JTree tree, TreeNode node) {
    TreeNode root = (TreeNode) tree.getModel().getRoot();
    if (node == root) {
        return "";
    }
    TreeNode parent = node.getParent();
    if (parent == null) {
        return null;
    }
    String parentIndex= getNodeIndex(tree, parent);
    if (parentIndex == null) {
        return null;
    }
    return parentIndex+"."+parent.getIndex(node);
}

只要您不在树中构建循环,此代码就可以正常运行,就像递归到根目录一样。