////////////////////////////////////////////////////////////// //// ////使用方法:只需将以下代码拷贝到项目的page.java文件中 //// /////////////////////////////////////////////////////////// ////返回选中节点 private TreeNode getSelectedTreeNode(Tree t) { String id = t.getCookieSelectedTreeNode(); if (id == null) return null; id = id.substring(id.lastIndexOf(':') + 1); return (TreeNode) this.getForm1().findComponentById(id); } /////删除选中节点 public void Remove_SelectNode(Tree t) { TreeNode selectnode = getSelectedTreeNode(t); if(selectnode==null) return; TreeNode parentNode =(TreeNode) selectnode.getParent(); java.util.List childrenList = parentNode.getChildren(); childrenList.remove(selectnode); } ///更改选中节点名 public void Rename_SelectNodeText(Tree t, String txt) { if(txt==null || txt.trim().length()==0) return; TreeNode selectnode = getSelectedTreeNode(t); if(selectnode==null) return; selectnode.setText(txt); } ///上移选中节点 public void Up_SelectNode(Tree t) { TreeNode selectnode = getSelectedTreeNode(t); if(selectnode==null) return; java.util.List childrenList = ((TreeNode)selectnode.getParent()).getChildren(); int index = childrenList.indexOf(selectnode); if (index > 0) { childrenList.remove(selectnode); childrenList.add(index - 1, selectnode); } } ///下移选中节点 public void Down_SelectNode(Tree t) { TreeNode selectnode = getSelectedTreeNode(t); if(selectnode==null) return; java.util.List childrenList = ((TreeNode)selectnode.getParent()).getChildren(); int index = childrenList.indexOf(selectnode); if (index < childrenList.size()-1) { childrenList.remove(selectnode); childrenList.add(index + 1, selectnode); } } ///在指定树下插入根节点 public TreeNode AddRoot_To_SelectTree(Tree t, String txt) { TreeNode rs = null; if(txt==null || txt.trim().length()==0) return rs; java.util.List childrenlist =t.getChildren(); String selectnodeid = t.getId(); ////下面代码保证ID不重复 String inserID; int NO=1; while(true){ inserID=selectnodeid+NO; boolean F_exist=false; int N=childrenlist.size(); for(int i=0;i<N;i++) { String st=((TreeNode)childrenlist.get(i)).getId(); if(inserID.equals(st)){ F_exist=true; break;} } if(F_exist==false)break; NO++; } /////////// TreeNode newnode = new TreeNode(); newnode.setText(txt); newnode.setImageURL("/resources/document.gif"); newnode.setId(inserID); childrenlist.add(newnode); rs = newnode; return rs; } ///在选中节点下插入孩子节点 public TreeNode AddChild_To_SelectNode(Tree t, String txt) { TreeNode rs = null; if(txt==null || txt.trim().length()==0) return rs; TreeNode selectnode = getSelectedTreeNode(t); if(selectnode==null) return rs; java.util.List childrenlist =selectnode.getChildren(); String selectnodeid = selectnode.getId(); ////下面代码保证ID不重复 String inserID; int NO=1; while(true){ inserID=selectnodeid+NO; boolean F_exist=false; int N=childrenlist.size(); for(int i=0;i<N;i++) { String st=((TreeNode)childrenlist.get(i)).getId(); if(inserID.equals(st)){ F_exist=true; break;} } if(F_exist==false)break; NO++; } /////////// TreeNode newnode = new TreeNode(); newnode.setText(txt); newnode.setImageURL("/resources/document.gif"); newnode.setId(inserID); childrenlist.add(newnode); rs = newnode; return rs; } //设置节点的超连接mode=_self | _blank | _parent | _top //url=""则取消超连接 public void Set_SelectNode_Url(Tree t, String url, String mode) { TreeNode selectnode = getSelectedTreeNode(t); if(selectnode==null) return; if(url=="") selectnode.setUrl(null); else selectnode.setUrl(url); selectnode.setTarget(mode); } //定义树结点 class NodeType{ public String ParentID; public String SelfID; public String SelfName; } ////////////////////////////////////////////////////////// // // 该函数被Tree_Construct(Tree t,ArrayList list)调用,用来递归的生成树 // 此处的list元素为Node // ////////////////////////////////////////////////////////// private void Node_Construct(Tree t, TreeNode nd, ArrayList list){ String TreeID = t.getId(); int TreeIDLength = TreeID.length(); java.util.List childrenlist =nd.getChildren(); int N = list.size(); for(int i=0; i<N; i++){ NodeType pd = (NodeType)list.get(i); if( pd.ParentID.equals(nd.getId().substring(TreeIDLength)) ){ TreeNode newnd = new TreeNode(); newnd.setText(pd.SelfName); newnd.setImageURL("/resources/document.gif"); newnd.setId(TreeID+pd.SelfID); childrenlist.add(newnd); } } int M = childrenlist.size(); for(int j=0; j<M; j++){ TreeNode tnd = (TreeNode)childrenlist.get(j); Node_Construct(t, tnd, list); } } /////////////////////////////////////////////////////// // // 该函数用参数list传入的节点信息生成树t的整个结构, // 此处的list元素为Node // /////////////////////////////////////////////////////// public void Tree_Construct(Tree t,ArrayList list){ String TreeID = t.getId(); java.util.List childrenlist =t.getChildren(); childrenlist.clear(); int N = list.size(); for(int i=0; i<N; i++){ NodeType pd = (NodeType)list.get(i); if( pd.ParentID.equals("ROOT") ){ TreeNode newnd = new TreeNode(); newnd.setText(pd.SelfName); newnd.setImageURL("/resources/document.gif"); newnd.setId(TreeID+pd.SelfID); childrenlist.add(newnd); } } int M = childrenlist.size(); for(int j=0; j<M; j++){ TreeNode tnd = (TreeNode)childrenlist.get(j); Node_Construct(t, tnd, list); } } //节点遍历的第归调用;被getTreeOffspring和getNodeOffspring调用 private void getNext(TreeNode nd, ArrayList output) { java.util.List childrenList = nd.getChildren(); int num=childrenList.size(); if( num >0 ) { for(int i=0;i<num;i++) { TreeNode newnode = (TreeNode)(childrenList.get(i)); output.add( newnode ); TreeNode nextnode = (TreeNode)(childrenList.get(i)); getNext(nextnode, output); } } } //返回树的所有节点 public ArrayList getTreeOffspring(Tree t) { ArrayList output = new ArrayList(); getNext(t, output); return output; } //返回指定节点下的所有节点 public ArrayList getNodeOffspring(TreeNode nd) { ArrayList output = new ArrayList(); getNext(nd, output); return output; } ///////////////////////////////////////////// 对树进行节点的更改是EJB如何更改 //////////////////////////////////////////// 1.插入根节点时,父ID应为:ROOT 自身ID应为去掉树ID名后的数字编号 TreeNode newnode = AddRoot_To_SelectTree(treeXX,this.textField7.getText().toString()); String parentid = "ROOT"; int TreeIDLength = treeXX.getId().length(); String selfid = newnode.getId().substring(TreeIDLength); String name = newnode.getText(); client.InsertRecord(parentid, selfid, name, ...); 2.插入子节点时,父ID和自身ID应为去掉树ID名后的数字编号 TreeNode newnode = AddChild_To_SelectNode(treeXX,this.textField5.getText().toString()); int TreeIDLength = treeXX.getId().length(); String parentid = newnode.getParent().getId().substring(TreeIDLength); String selfid = newnode.getId().substring(TreeIDLength); String name = newnode.getText(); client.InsertRecord(parentid, selfid, name,....); 3.节点改名,从界面获取去掉树ID后的节点ID,以次为主健调用EJB刷新纪录 Rename_SelectNodeText(treeXX,this.textField6.getText().toString()); int TreeIDLength = treeXX.getId().length(); String selfid = getSelectedTreeNode(treeXX).getId().substring(TreeIDLength); String name = this.textField6.getText().toString(); client.UpdataRecord(selfid, null, null, name, null); 4.删除节点,从界面获取要删除的所有节点列表,以次为据调用EJB删除纪录 //删除数据库对应纪录 int TreeIDLength = treeXX.getId().length(); TreeNode selectnode = getSelectedTreeNode(treeXX); TreeNode parentnode = (TreeNode)selectnode.getParent(); ArrayList list = getNodeOffspring(selectnode); list.add(selectnode); int N = list.size(); for(int i=0; i<N; i++){ String selfid = ((TreeNode)list.get(i)).getId().substring(TreeIDLength); client.DeleteRecord(selfid); } //删除界面树对应节点 Remove_SelectNode(treeXX);