当时有几个想法,通过父节点ID来查询当前节点需要挂接在那个ID对应的节点。查询相关资料后发现,JTree只有索引,没有ID,而且,索引是相对于父级节点的。这样的话就比较棘手。后面有了新的思路。
先简单介绍一下我数据是怎么样的:节点ID、节点名字、父级节点ID;大致主要数据就是这样
节点拼接思路: 将当前节点的ID存入MAP,设置成key,将节点索引存成MAP的value(value需包含从根节点至当前节点索引信息) 通过当前节点的父级ID,从map中取出父级节点的所用,再将当前节点挂接到相应节点
实现方法:
//根节点,构造函数中初始化
static DefaultMutableTreeNode root;
//当前节点
static DefaultMutableTreeNode currentNode;
public static void nodeOperating(String[][] data) {
HashMap<String,String> map = new HashMap<String ,String>();
for(int i = 0; i<data.length;i++){
//节点名称
String nodeName = data[i][1];
//父级节点,如果等于空,则为根节点
String fatherNode = data[i][2];
if(fatherNode.equals("")){
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(nodeName);
root.add(newNode);
//获取当前节点索引
int nodeIndex = newNode.getParent().getIndex(newNode);
map.put(data[i][3], "0-"+nodeIndex);
}else{
//父级节点不为空,取出父级节点的位置
String[] fatherNodeIndex = fatherNode.split("-");
for(int j = 0;j<fatherNodeIndex.length-1;j++){
//将根节点赋值给当前节点
if(j == 0){
currentNode = root;
}
//获取下级节点
currentNode = (DefaultMutableTreeNode)currentNode.getChildAt(Integer.valueOf(fatherNodeIndex[j]+1));
}
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(nodeName);
//将子节点挂接到上级节点中
currentNode.add(new DefaultMutableTreeNode(nodeName));
//获取当前节点索引
int nodeIndex = newNode.getParent().getIndex(newNode);
//将父级索引和当前索引拼接
map.put(data[i][3], fatherNode+"-"+nodeIndex);
}
}
}
以上方法仅凭思路写出来的,没有实际运行,所以逻辑,写法上面可能会有错误。思路应该是没有问题的。





Comments | NOTHING