这个整个树形结构的类,仅供参考
package com.kingdee.eas.fdc.basedata.client;
import com.kingdee.bos.BOSException;
import com.kingdee.bos.ctrl.swing.KDTree;
import com.kingdee.bos.ctrl.swing.tree.DefaultKingdeeTreeNode;
import com.kingdee.bos.ctrl.swing.tree.KingdeeTreeModel;
import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
import com.kingdee.bos.framework.cache.ActionCache;
import com.kingdee.bos.metadata.IMetaDataPK;
import com.kingdee.bos.metadata.MetaDataPK;
import com.kingdee.bos.metadata.entity.EntityViewInfo;
import com.kingdee.bos.metadata.entity.FilterInfo;
import com.kingdee.bos.metadata.entity.FilterItemCollection;
import com.kingdee.bos.metadata.entity.FilterItemInfo;
import com.kingdee.bos.metadata.entity.SelectorItemCollection;
import com.kingdee.bos.metadata.query.util.CompareType;
import com.kingdee.bos.ui.face.CoreUIObject;
import com.kingdee.bos.ui.face.ItemAction;
import com.kingdee.bos.util.BOSUuid;
import com.kingdee.eas.ady.actlzemgn.ProjectCollection;
import com.kingdee.eas.ady.actlzemgn.ProjectFactory;
import com.kingdee.eas.ady.actlzemgn.ProjectInfo;
import com.kingdee.eas.base.param.IParamControl;
import com.kingdee.eas.base.param.ParamControlFactory;
import com.kingdee.eas.base.permission.IPermission;
import com.kingdee.eas.base.permission.PermissionFactory;
import com.kingdee.eas.base.permission.UserInfo;
import com.kingdee.eas.basedata.org.AdminOrgUnitCollection;
import com.kingdee.eas.basedata.org.AdminOrgUnitFactory;
import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
import com.kingdee.eas.basedata.org.CompanyOrgUnitCollection;
import com.kingdee.eas.basedata.org.CompanyOrgUnitFactory;
import com.kingdee.eas.basedata.org.CompanyOrgUnitInfo;
import com.kingdee.eas.basedata.org.FullOrgUnitInfo;
import com.kingdee.eas.basedata.org.ICompanyOrgUnit;
import com.kingdee.eas.basedata.org.NewOrgUtils;
import com.kingdee.eas.basedata.org.OrgStructureInfo;
import com.kingdee.eas.basedata.org.OrgType;
import com.kingdee.eas.basedata.org.OrgUnitInfo;
import com.kingdee.eas.basedata.org.OrgViewType;
import com.kingdee.eas.common.EASBizException;
import com.kingdee.eas.common.client.SysContext;
//import com.kingdee.eas.fdc.basedata.CurProjProductEntriesCollection;
//import com.kingdee.eas.fdc.basedata.CurProjProductEntriesFactory;
//import com.kingdee.eas.fdc.basedata.CurProjProductEntriesInfo;
//import com.kingdee.eas.fdc.basedata.CurProjectFactory;
//import com.kingdee.eas.fdc.basedata.ICurProjProductEntries;
//import com.kingdee.eas.fdc.basedata.ICurProject;
//import com.kingdee.eas.fdc.basedata.IProjectWithCostCenterOU;
//import com.kingdee.eas.fdc.basedata.ProjectWithCostCenterOUCollection;
//import com.kingdee.eas.fdc.basedata.ProjectWithCostCenterOUFactory;
//import com.kingdee.eas.fdc.basedata.ProjectWithCostCenterOUInfo;
import com.kingdee.eas.framework.AbstractCoreBaseInfo;
import com.kingdee.eas.framework.ITreeBase;
import com.kingdee.eas.framework.client.CoreUI;
import com.kingdee.eas.framework.client.tree.DefaultLNTreeNodeCtrl;
import com.kingdee.eas.framework.client.tree.ILNTreeNodeCtrl;
import com.kingdee.eas.framework.client.tree.ITreeBuilder;
import com.kingdee.eas.framework.client.tree.KDTreeNode;
import com.kingdee.eas.framework.client.tree.TreeBuilderFactory;
import com.kingdee.eas.util.SysUtil;
import com.kingdee.eas.util.client.MsgBox;
import java.awt.Color;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.event.TreeWillExpandListener;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.ExpandVetoException;
import javax.swing.tree.MutableTreeNode;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreeNode;
public class ProjectTreeBuilder
{
private TreeSelectionListener treeSelectionListener;
private ITreeBuilder treeBuilder;
public Object getRootName() {
return null;
}
public Object getRootObject() {
return getRootName();
}
//创建根目录的树,添加监听事件
public void buildTypeTree(KDTree projectTree) throws Exception{
KDTree treeMain = projectTree;
TreeSelectionListener[] listeners = treeMain.getTreeSelectionListeners();
if (listeners.length > 0) {
this.treeSelectionListener = listeners[0];
treeMain.removeTreeSelectionListener(this.treeSelectionListener);
}
this.treeBuilder = TreeBuilderFactory.createTreeBuilder(
getLNTreeNodeCtrl(), TreeBuilderFactory.DEFAULT_INITIAL_LEVEL,
TreeBuilderFactory.DEFAULT_EXPAND_LEVEL,
getDefaultFilterForTree());
if (getRootName() != null) {
//注意这里的属性类,如果此类不合适你的环境需求,可以根据自己需要的属性定义别的类
KDTreeNode rootNode = new KDTreeNode(getRootObject());
((DefaultTreeModel) treeMain.getModel()).setRoot(rootNode);
} else {
((DefaultTreeModel) treeMain.getModel()).setRoot(null);
}
this.treeBuilder.buildTree(treeMain);
treeMain.addTreeSelectionListener(this.treeSelectionListener);
treeMain.setShowPopMenuDefaultItem(false);
}
//创建根节点的项目类型,把根节点查询出来的项目树直接添加到根目录下面
public void buildProjectTree(KDTree projectTree, TreeModel newTreeModel)
throws Exception {
projectTree.setModel(newTreeModel);
buildProjTree(projectTree);
Map idNode = (Map)projectTree.getUserObject();
Map orgMap = new HashMap();
genNodeMap((KDTreeNode) newTreeModel.getRoot(), orgMap);
for (Iterator it = idNode.keySet().iterator(); it.hasNext();) {
String id = (String) it.next();
KDTreeNode proNode = (KDTreeNode) idNode.get(id);
ProjectInfo info = (ProjectInfo) proNode.getUserObject();
String orgId = info.getAdminOrgUnit().getId().toString();
KDTreeNode orgNode = (KDTreeNode) orgMap.get(orgId);
proNode.setText(info.getName());
if (orgNode != null)
orgNode.add(proNode);
}
}
//获取根节点,查询出部门信息
public void genNodeMap(TreeNode root, Map map)
{
int count = root.getChildCount();
KDTreeNode treeNode = null;
for (int i = 0; i < count; ++i) {
if(root.getChildAt(i)==null || !(root.getChildAt(i) instanceof KDTreeNode))continue;
treeNode = (KDTreeNode)root.getChildAt(i);
Object userObj = treeNode.getUserObject();
String id = null;
if (userObj instanceof AdminOrgUnitInfo)
{
id = ((AbstractCoreBaseInfo) userObj).getId().toString();
}
if (id != null) {
map.put(id, treeNode);
}
genNodeMap(treeNode, map);
}
}
//获取根节点,项目树的集合,添加到根目录下
public void buildProjTree(KDTree projectTree) throws Exception {
KDTree ProjecTree = projectTree;
Map idProjectNodes = new HashMap();
// EntityViewInfo view = new EntityViewInfo();
// FilterInfo filter = new FilterInfo();
// filter.getFilterItems().add(new FilterItemInfo("isNewProject", "1"));
// view.setFilter(filter);
ProjectCollection projectColl = ProjectFactory.getRemoteInstance().getProjectCollection();
for (int i = 0; i < projectColl.size(); ++i) {
ProjectInfo info = projectColl.get(i);
KDTreeNode node = new KDTreeNode(ProjecTree);
node.setUserObject(info);
idProjectNodes.put(info.getId().toString(), node);
}
ProjecTree.setUserObject(idProjectNodes);
}
//这里是过根目录的信息(ID),如果想展示出所以的部门,就把第二行注释掉
public FilterInfo getDefaultFilterForTree() {
FilterInfo filter = new FilterInfo();
filter.getFilterItems().add(new FilterItemInfo("id", "xX4AAAAAAA3M567U"));
return filter;
}
public ILNTreeNodeCtrl getLNTreeNodeCtrl() throws Exception {
return new DefaultLNTreeNodeCtrl(getTreeInterface());
}
//定义部门持久化接口
public ITreeBase getTreeInterface() throws Exception {
return AdminOrgUnitFactory.getRemoteInstance();
}
}