没有找到相关API,请教有没有例子,谢谢

解决方案 »

  1.   

          package com.ultrapower.report.common.tree;
    import java.io.UnsupportedEncodingException;
    import java.net.URI;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.TreeMap;import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;import com.ultrapower.report.common.Encoding;
    import com.ultrapower.report.rpt.session.SessionInfo;
    import com.ultrapower.report.rpt.session.SessionManager;
    import com.ultrapower.ultranms.common.Tool;
    public class Tree {
    private final static Log log = LogFactory.getLog(Tree.class); @SuppressWarnings("unchecked")
    public TreeNode createTree(OrderMap orderMap) {
          TreeNode tree = new TreeNode("root");
          ArrayList<String> list = new ArrayList<String>();
          list = orderMap.getList();
          HashMap<String, TreeNode> map = new HashMap<String, TreeNode>();
          map = orderMap.getMap();
    for(int i=0;i<list.size();i++){
    TreeNode treeNode = null;
    TreeNode parentNode = null;
    treeNode = map.get(list.get(i));
    //如果父亲节点为0或空,则挂到root节点上
    if(treeNode.getParentNodeId()==null||"0".equals(treeNode.getParentNodeId())){
    insert(treeNode,tree);
    }else{
    parentNode = (TreeNode) map.get(treeNode.getParentNodeId());
    insert(treeNode,parentNode);
    }
    }
      order(tree,0);
      return tree;
    }

    public String showTreeNode(TreeNode tree, String ispread,String iam,Boolean oncontextmenu) throws UnsupportedEncodingException {
    StringBuffer treeBuffer = new StringBuffer();
    if("root".equals(tree.getNodeId())){
    for(int i=0;i<tree.getChildren().size();i++){
    treeBuffer.append(this.showTreeNode(tree.getChildren().get(i),ispread,iam,oncontextmenu));
    }
    }else{
    //是否有子节点,有子节点:(单击打开子节点、添加加号标示);无子节点单:(单击打开页面)
    if ((tree.getChildren()!=null&&tree.getChildren().size()>0)||Tool.isNull(tree.getOrtherProperties("catalog_url"))) { // 目录
    //目录节点展开显示
    SessionInfo sessionInfo = SessionManager.getSessionInfo(iam);
    String style=sessionInfo.getStylePath();
    String srcimage = "/report/style/"+style+"/images/closed.gif";
    String isShow = "display:none";
    if(tree.getNodeLevel() <= Integer.parseInt(ispread)){
    srcimage = "/report/style/"+style+"/images/opened.gif";
    isShow = "display:";
    }
    if(oncontextmenu){
    treeBuffer.append("<table CELLPADDING=0 CELLSPACING=0><tr><td nowrap  oncontextmenu=cutreturnValue(event);getrightdiv(event,'treerightfile','"+tree.getNodeId()+"','"+java.net.URLEncoder.encode(tree.getNodeName(), "utf-8")+"')>\n");
    }else{
    treeBuffer.append("<table CELLPADDING=0 CELLSPACING=0><tr><td nowrap  oncontextmenu=cutreturnValue(event);>\n");
    }
    treeBuffer.append("<div class=\"div1\" style=\"cursor:pointer;\" onClick=\"javascript:menu_control1('"+style+"','menu_"+ tree.getNodeId()+ "', '', 'pic1_" + tree.getNodeId() + "','"+tree.getNodeId()+"','"+tree.getNodeName()+"')\">");
    //每增加一级添加三个空格
    for (int j=1; j < tree.getNodeLevel(); j++) {
    treeBuffer.append("&nbsp;&nbsp;&nbsp;");
    }


    //添加图片和名称
    treeBuffer.append("<img border=\"0\"  src=\""+srcimage+"\" name=\"pic1\" id=\"pic1_"+ tree.getNodeId() + "\">");
    treeBuffer.append("<img border=\"0\"  src=\"/report" + tree.getOrtherProperties("imageurl")+ "\" id=\"pic_2" + tree.getNodeId()+ "\">");
    treeBuffer.append(tree.getNodeName());
    treeBuffer.append("</div>\n");
    treeBuffer.append("</td></tr></table>\n");
    //子节点的div
    treeBuffer.append("<div name=\"menu\" id=\"menu_" + tree.getNodeId()+ "\" style=\""+isShow+"\">\n");
    for(int i=0;i<tree.getChildren().size();i++){
    treeBuffer.append(this.showTreeNode(tree.getChildren().get(i),ispread,iam,oncontextmenu));
    }
    treeBuffer.append("</div>\n");
    } else { // 菜单
    boolean isShow = true;
    if(isShow){
    if(oncontextmenu){
    treeBuffer.append("<table CELLPADDING=0 CELLSPACING=0><tr height=10px><td nowrap oncontextmenu=cutreturnValue(event);getrightdiv(event,'treerightcontext','"+tree.getNodeId()+"','"+java.net.URLEncoder.encode(tree.getNodeName(), "utf-8")+"')>\n");
    }else{
    treeBuffer.append("<table CELLPADDING=0 CELLSPACING=0><tr height=10px><td nowrap oncontextmenu=cutreturnValue(event);>\n");
    }

    //每增加一级添加三个空格
    for (int j=1; j < tree.getNodeLevel(); j++) {
    treeBuffer.append("&nbsp;&nbsp;&nbsp;");
    }
    //添加单击事件
    if (tree.getOrtherProperties("catalog_url") != null && tree.getOrtherProperties("catalog_url").length() != 0) {
    if (Encoding.isHttpUrl(tree.getOrtherProperties("catalog_url"))) {
    treeBuffer.append("<a href=\'" + tree.getOrtherProperties("catalog_url") + "\' onClick='changeColor(this);' target=\"mainsFrame\">");
    }else{
    treeBuffer.append("<a href=\"javascript:suburl(\'/"+tree.getOrtherProperties("appsystem")+"/modulefind?iam=" + iam + "&rpt_treeid="+tree.getOrtherProperties("rpt_treeid")+"\',\'"+tree.getOrtherProperties("catalog_url")+"\')\"  onClick='changeColor(this);'>");
    }
    } else {
    treeBuffer.append("<a href=\'/report/common/nodenull.jsp?sid="+ tree.getNodeId()+ "&iam="+ iam+ "\' onClick='changeColor(this);' target=\"mainsFrame\">");
    }
    //验证是否末梢节点,添加树左侧线条
    if (tree.getEndNode()) {
    treeBuffer.append("<img border=\"0\" src=\"../style/common/report/node/leafend.gif\"   align=\"absmiddle\">");
    } else {
    treeBuffer.append("<img border=\"0\" src=\"../style/common/report/node/midnd.gif\"   align=\"absmiddle\">");
    }
    treeBuffer.append("<img border=\"0\" src=\"/report" + tree.getOrtherProperties("imageurl")+ "\" id=\"pic_2" + tree.getNodeId() + "\"  align=\"absmiddle\" >");
    treeBuffer.append(tree.getNodeName());
    treeBuffer.append("</a>");
    treeBuffer.append("<br/>\n");
    treeBuffer.append("</td></tr></table>\n");
    }
    }
    }
    return treeBuffer.toString();
    }
    /**
     * @param treeNode
     * @param parentNode
     */
    private void insert(TreeNode treeNode,TreeNode parentNode){
    try{
    //将子节点挂到父节点上
    parentNode.addChildren(treeNode);
    //指定子节点的父节点
    if(treeNode.getParent()==null){
    treeNode.setParent(parentNode);
    }
    }catch (Exception e) {
    log.error("创建节点关系失败"+e);
    }
    }
    /**
     * 
     */
    private void order(TreeNode tree,int nodeLevel){
    try{
    tree.setNodeLevel(nodeLevel);
    for(int i=0;i<tree.getChildren().size();i++){
    //设定级别
    order(tree.getChildren().get(i),nodeLevel+1);
    //设定是否末梢节点
    if(i==tree.getChildren().size()-1){
    tree.getChildren().get(i).setEndNode(true);
    }
    }
    }catch (Exception e) {
    log.error("设定级别失败"+e);
    }
    }



    }
      

  2.   

    刚才试了下用递归方法去遍历一次TREE,通过比对查找
    请问有没有其他更好的方法了,哪位大侠来回答下~