我想在添加新节点时为JTree的每个节点创建一个索引(1,1.2,1.3,2.1等),
即
root
|
---1 node
|
---2 node
|
---2.1 node
有人知道我该怎么办吗?提前感谢您的任何答案。
答案 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);
}
只要您不在树中构建循环,此代码就可以正常运行,就像递归到根目录一样。