Swing多节点树拼接

发布于 2018-06-29  2480 次阅读


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

以上方法仅凭思路写出来的,没有实际运行,所以逻辑,写法上面可能会有错误。思路应该是没有问题的。


个人博客,用于记录工作日常的问题。