当时有几个想法,通过父节点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