java SWT 开发,递归生成Tree

说明:数据库中存有两张表,

第一张studio_unitinfo机构表,表中有id 和parentid (此为父节点id,若parentid =0,表示此节点为最终根节点);

第二张表为studio_unituser 人员表,表中有机构unitid(此id 表示此人员的上级机构) 和id 

/**

* 递归生成树,生成树根节点
* @param 父节点
* @throws Exception 
*/
public TreeItem createTree(Tree tree) throws Exception{
//加载第一级节点,组织机构节点
String loadSql = "select t.unitid,t.unitname from studio_unitinfo t WHERE parentunitid='0' AND state='使用'";
//打开数据库连接(此IDBOperateDAO为自己封装的数据库操作类)

IDBOperateDAO dao = SpringUtil.getDBOperateDAO();

//获取机构树的数据

List<Map<String,Object>> rootUnitList = dao.executeQuerySQL(loadSql, new HashMap(), "unitId,unitName", null);
TreeItem item = null;
if(rootUnitList != null){
//循环生成树节点
for(Map<String,Object> rowObj : rootUnitList){
String unitId = ""+rowObj.get("unitId");
String unitName = ""+rowObj.get("unitName");
//根据数据构建树
item = new TreeItem(tree, SWT.NONE);
//设置节点图片
Image icon = Activator.getImage("icons/studio/unit.png");
item.setImage(icon);
//设置节点标识
item.setData("unitId",unitId);
//设置节点类型
item.setData("type","unit");
//设置节点名称
item.setText(unitName);
//加载当前节点的下级节点
createTree(item);
//加载人员信息
loadUnitUser(item);

}
}
return item;

}


/**
* 递归生成树,根据父节点,生成子节点
* @param 父节点
* @throws Exception 
*/
public void createTree(TreeItem parentTreeItem) throws Exception
{
if(parentTreeItem != null && "unit".equals(parentTreeItem.getData("type")) && !"".equals(parentTreeItem.getData("unitId"))){
//获取当前节点的ID
String parentUnitId = ""+parentTreeItem.getData("unitId");
//根据当前节点ID加载下级单位
String loadUnitSql = "select t.unitid,t.unitname from studio_unitinfo t WHERE parentunitid='"+parentUnitId+"' AND state='使用'";
IDBOperateDAO dao = SpringUtil.getDBOperateDAO();
List<Map<String,Object>> childrenUnitList = dao.executeQuerySQL(loadUnitSql, new HashMap(), "unitId,unitName", null);
if(childrenUnitList != null){
//循环生成树节点
for(Map<String,Object> rowObj : childrenUnitList){
String unitId = ""+rowObj.get("unitId");
String unitName = ""+rowObj.get("unitName");
//如果为组织机构,则不创建节点
if(!unitId.equals("0"))
{
//根据数据构建树
TreeItem item = new TreeItem(parentTreeItem, SWT.NONE);
//设置节点图片
Image icon = Activator.getImage("icons/studio/unit.png");
item.setImage(icon);
//设置节点标识
item.setData("unitId",unitId);
//设置节点类型
item.setData("type","unit");
//设置节点名称
item.setText(unitName);
//加载当前节点的下级节点
createTree(item);
//加载人员信息
loadUnitUser(item);

if(isTreeSelect)
{
//展开已选树
item.setExpanded(true);
item.getParentItem().setExpanded(true);
//修改选择标识符的状态
isTreeSelect = false;
}
checkOrCleanAll(item,item.getChecked());
//selectOrClean(item,item.getChecked());
}
}
}
}
}

/**
* 加载当前机构的人员
* @param parentTreeItem
* @throws Exception
*/
public void loadUnitUser(TreeItem unitTreeItem) throws Exception{
if(unitTreeItem != null && "unit".equals(unitTreeItem.getData("type")) && !"".equals(unitTreeItem.getData("unitId"))){
//获取当前节点的ID
String unitId = ""+unitTreeItem.getData("unitId");
String loadHumanSql = "SELECT b.userid,b.username FROM studio_unituser a,studio_userlist b WHERE a.unitid='"+unitId+"' AND a.userid = b.userid AND b.state='使用'";
IDBOperateDAO dao = SpringUtil.getDBOperateDAO();
List<Map<String,Object>> userList = dao.executeQuerySQL(loadHumanSql, new HashMap(), "userId,userName", null);
if(userList != null){
//循环生成树节点
for(Map<String,Object> rowObj : userList){
String userId = ""+((Double)rowObj.get("userId")).longValue();
String userName = ""+rowObj.get("userName");
//根据数据构建树
TreeItem item = new TreeItem(unitTreeItem, SWT.NONE);
//设置节点图片
Image icon = Activator.getImage("icons/studio/user.png");
item.setImage(icon);
//设置节点标识
item.setData("userId",userId);
item.setData("userName",userName);
//设置节点类型
item.setData("type","user");
//将人员节点保存到treeItemList
treeItemList.add(item);
//设置节点名称 
item.setText(userName);
//设置自动选中
List<Map<String,Object>> list =getResultList();
for(Map<String,Object> node:list)
{
String name = ""+node.get("name");
if(name.equals(item.getText()))
{
item.setExpanded(true);
item.getParentItem().setExpanded(true);
item.setChecked(true);
//标识已经被选,展开其父节点
isTreeSelect = true;
}
}
checkOrCleanAll(item,item.getChecked());
}
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值