JTree使用之调用数据库动态生成JTree

来源:互联网 发布:疯狂美工破解版 编辑:程序博客网 时间:2024/05/22 01:47

项目需求,从数据库动态生成JTree。

有两种方式:1,在树里边定义一个list<Department> child的字段

/* * To change this template, choose Tools | Templates * and open the template in the editor. */package com.sc.po;import java.util.ArrayList;import java.util.List;/** * * @author syj */public class Department {    private int id;    private String dname;    private int pid;    private String comment;    private List<Department> children=new ArrayList<Department>();    /**     * @return the id     */    public int getId() {        return id;    }    /**     * @param id the id to set     */    public void setId(int id) {        this.id = id;    }    /**     * @return the dname     */    public String getDname() {        return dname;    }    /**     * @param dname the dname to set     */    public void setDname(String dname) {        this.dname = dname;    }    /**     * @return the pid     */    public int getPid() {        return pid;    }    /**     * @param pid the pid to set     */    public void setPid(int pid) {        this.pid = pid;    }    /**     * @return the comment     */    public String getComment() {        return comment;    }    /**     * @param comment the comment to set     */    public void setComment(String comment) {        this.comment = comment;    }    /**     * @return the children     */    public List<Department> getChildren() {        return children;    }    /**     * @param children the children to set     */    public void setChildren(List<Department> children) {        this.children = children;    }            }
数据库

CREATE TABLE `department` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `dname` varchar(36) NOT NULL,  `pid` int(11) NOT NULL,  `comment` varchar(150) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;

service层


    public List<Department> getDepartmentsByPid(int pid)//通过pid构建成树的list集合    {        List<Department> resultlist=new ArrayList<Department>();        List<Department> departmentlist=departmentdao.getDepartmentByPid(pid);//通过父节点获得子节点        for(Department department:departmentlist)        {            List<Department> children=getDepartmentsByPid(department.getId());            department.setChildren(children);            resultlist.add(department);        }        return resultlist;    };

view层


构建树:

    public static void initTree(List<Department> list, DefaultMutableTreeNode parent) {        for (Department department : list) {            List<Department> children = department.getChildren();            DefaultMutableTreeNode other = new DefaultMutableTreeNode(new KeyValue(                    department.getDname(), department));            initTree(children, other);            parent.add(other);        }    }

显示树

  DepartmentService departmentService = new DepartmentServiceImpl();        Department department = departmentService.getDepatmentById(1);        DefaultMutableTreeNode root = new DefaultMutableTreeNode(new KeyValue(                department.getDname(), department));          List<Department> list1 = departmentService.getDepartmentsByPid(department.getId());          initTree(list1,root);//        List<Department> list = departmentService.getAllDepatment();//        initTree1(list, 1, root);        DefaultTreeModel model = new DefaultTreeModel(root);        jTree1.setModel(model);        jTree1.getSelectionModel().setSelectionMode(                DefaultTreeSelectionModel.SINGLE_TREE_SELECTION);

第二种方式,Dapartment 不需要List<Department> childern字段

数据库获取Dapartment表中的所有字段

service

    public List<Department> getAllDepatment() {        List<Department> list=departmentdao.getAllDepatment();        list.remove(0);        return list;    }

view

生成树

    public static void initTree1(List<Department> list, int pid, DefaultMutableTreeNode parent) {        for (Department department : list) {            if (department.getPid() == pid) {                DefaultMutableTreeNode other = new DefaultMutableTreeNode(new KeyValue(                        department.getDname(), department));                initTree1(list, department.getId(), other);                parent.add(other);            }        }    }


显示数

     DepartmentService departmentService = new DepartmentServiceImpl();        Department department = departmentService.getDepatmentById(1);        DefaultMutableTreeNode root = new DefaultMutableTreeNode(new KeyValue(                department.getDname(), department));//          List<Department> list1 = departmentService.getDepartmentsByPid(department.getId());//          initTree(list1,root);        List<Department> list = departmentService.getAllDepatment();        initTree1(list, 1, root);        DefaultTreeModel model = new DefaultTreeModel(root);        jTree1.setModel(model);        jTree1.getSelectionModel().setSelectionMode(                DefaultTreeSelectionModel.SINGLE_TREE_SELECTION);

比较:不用多说了,第一种方式比较容易想,但是烂透了。还是第二种好

截图:两种结果都一样




1 0
原创粉丝点击