package com.vci.client.omd.btm.ui; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; import com.vci.corba.omd.btm.BtmItem; import com.vci.client.omd.btm.wrapper.BtmItemWrapper; import com.vci.client.omd.ui.OmdTreeCellRenderer; import com.vci.corba.common.VCIError; import com.vci.omd.utils.BTComparator; public class BtmTree extends JTree{ /** * */ private static final long serialVersionUID = 4957161428498834276L; private BtmItem[] btmArray; private HashMap> btmListMap; private DefaultMutableTreeNode btmRootNode = new DefaultMutableTreeNode("业务类型"); public BtmTree(){ super(); DefaultTreeModel dtm = new DefaultTreeModel(btmRootNode); this.setModel(dtm); setAutoscrolls(true); //设置单选模式 getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); setOpaque(true); initOrUpdate(); setCellRenderer(new OmdTreeCellRenderer()); } public void initOrUpdate(){ try { btmArray = BtmClient.getService().getAllBtmItem(""); btmListMap = new HashMap>(); BtmItem btItem = null; btmRootNode = (DefaultMutableTreeNode) this.getModel().getRoot(); if(!btmRootNode.isLeaf()){ btmRootNode.removeAllChildren(); } for(int i = 0; i < btmArray.length; i++){ btItem = btmArray[i]; if(btItem.fName.equals("")){ btmRootNode.add(new DefaultMutableTreeNode(new BtmItemWrapper(btItem))); }else{ if(btmListMap.get(btItem.fName) == null){ ArrayList btList = new ArrayList(); btList.add(btItem); btmListMap.put(btItem.fName, btList); }else{ btmListMap.get(btItem.fName).add(btItem); } } } //也许这段可以加到上面的if中 for(Enumeration e = btmRootNode.children(); e.hasMoreElements();){ DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.nextElement(); if(node.isLeaf()){ addBtmNodeToTree(node); } } this.updateUI(); this.expandPath(new TreePath(btmRootNode)); } catch (VCIError e) { e.printStackTrace(); }catch(Exception e){ e.printStackTrace(); } } /** * 由叶子节点去btmListMap中查找子节点 * @param node */ private void addBtmNodeToTree(DefaultMutableTreeNode node){ BtmItem btmItem = ((BtmItemWrapper)node.getUserObject()).btmItem; if(btmListMap.get(btmItem.name) == null){ return; }else{ ArrayList btmList = null; BtmItem btmItem_ = null; DefaultMutableTreeNode node_ = null; btmList = btmListMap.get(btmItem.name); Collections.sort(btmList, new BTComparator()); for(int i = 0; i < btmList.size(); i++){ btmItem_ = btmList.get(i); node_ = new DefaultMutableTreeNode(new BtmItemWrapper(btmItem_)); node.add(node_); addBtmNodeToTree(node_); } } } }