假设你的结果集是个Date[],其中Date类定义如下:
    class Date {
        String typeid;        String parentid;        String name;
    }
那么根据表1造树如下:    HashMap nodemap = new HashMap();
    DefaultMutableTreeNode root = new DefaultMutableTreeNode();    public void buildTree() {
        Date[] dates = getResult();//获得结果集
        nodemap.clear();
        root.removeAllChildren();
        for (int i = 0; i < dates.length; i++)
        {
            DefaultMutableTreeNode node = getNode(dates[i].typeid);
            if (node.getUserObject() == null)
                node.setUserObject(dates[i]);
            DefaultMutableTreeNode parentnode = getNode(dates[i].parentid);
            parentnode.add(node);
        }
        JTree tree = new JTree(root);//这就是结果了
    }    public DefaultMutableTreeNode getNode(String typeid) {
        if (typeid == null)
            return null;
        if(typeid.equals("0"))
            return root;
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) nodemap.get(typeid);
        if (node == null)
        {
            node = new DefaultMutableTreeNode();
            nodemap.put(typeid, node);
        }
        return node;
    }
基本就是这样,其他的显示什么的你调整DefaultMutableTreeNode里的属性就好了,表2就不用我写了吧,同样道理

解决方案 »

  1.   

    http://community.csdn.net/Expert/TopicView.asp?id=3886935
      

  2.   

    http://community.csdn.net/Expert/TopicView.asp?id=3886935
      

  3.   

    relive我的是根据这俩个表生成一个树
      

  4.   

    假设你2表的结果集是个Date2[],其中Date2类定义如下:
        class Date2 {
            String contentid;        String typeid;        String name;
            ......
        }
    那么你在造树的时候只要加个for循环就搞定了啊
        public void buildTree() {
            Date[] dates = getResult();//获得结果集
            Date2[] date2s = getResult();//获得2结果集
            nodemap.clear();
            root.removeAllChildren();
            for (int i = 0; i < dates.length; i++)
            {
                DefaultMutableTreeNode node = getNode(dates[i].typeid);
                if (node.getUserObject() == null)
                    node.setUserObject(dates[i]);
                DefaultMutableTreeNode parentnode = getNode(dates[i].parentid);
                parentnode.add(node);
            }        //只要加这个循环就好了,连代码都是copy上个循环的
            for (int i = 0; i < date2s.length; i++)
            {
                DefaultMutableTreeNode node = getNode(date2s[i].contentid);
                if (node.getUserObject() == null)
                    node.setUserObject(date2s[i]);
                DefaultMutableTreeNode parentnode = getNode(date2s[i].typeid);
                parentnode.add(node);
            }
            JTree tree = new JTree(root);//这就是结果了
        }晕死,果然现在的新人都是只动嘴不动脑的,原理完全一样的
    还有,为了在树上显示你要的编码或名称,请覆盖Data和Data2类的toString()方法,返回你要的东西,还是先说给你吧,免得树造出来你不认识又郁闷我
    例如你只要名称
        class Date {
        public String toString(){
            return name;
        }
        }
    编码+名称
        class Date {
        public String toString(){
            return typeid+" "+name;
        }
        }私下里猜shenyinhong(小草)你一定是MM,因为不动脑子是MM的特权
      

  5.   

    对不起啊,麻烦您了,其实我昨天去书店查了一下午书,都没查到,自己瞎编的又全是错误,气死了,所以才上来问的.relive,您能介绍一本这方面的书吗?我查的书都没有根据数据库建树的例子
      

  6.   

    shenyinhong(小草)
    对不起啊,可能说的重了点,别在意啊其实我觉得你一开始的目标就错了,你不应该找根据数据库建树的例子,你应该找个建树的例子,跟数据库不相干的,只要搞通JTree,不用管你数据是在数据库还是文件还是别的来源。关于JTree的用法,随便一本关于swing的书都有。
      

  7.   

    哦,谢谢你relive,问题已经解决了!现在向下一个目标前进了!