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

项目需求,从数据库动态生成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);

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

截图:两种结果都一样




你可能感兴趣的:(JTree使用之调用数据库动态生成JTree)