对treeModel,根据节点名称如何查找到一个节点,获得该节点 没有找到相关API,请教有没有例子,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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(" "); } //添加图片和名称 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(" "); } //添加单击事件 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); } } } 刚才试了下用递归方法去遍历一次TREE,通过比对查找请问有没有其他更好的方法了,哪位大侠来回答下~ Jcombox 如何向HTML里面的下拉列表框一样 我在我的程序中要读取一个文件的内容,在读取的时候有可能其他的程序(该程序不可修改)会对文件进行写操作。怎样才不会让进行写操作的程序访问这个文件时候被拒绝 设置classpath c++转换到java 如何判断接收到的byte[]内容为int 高分求批量上传的例子! 有谁能够告诉我,为什么JB9里连接sql server2000时只能连接系统自带的那些库(如pubs) 关于序列化和对象转换 使用java实现求树形结构通路的问题 关于Comparator的问题,求大神解答 java tracker服务器 (bt服务器) 线程问题
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(" ");
}
//添加图片和名称
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(" ");
}
//添加单击事件
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);
}
}
}
请问有没有其他更好的方法了,哪位大侠来回答下~