• 树的操作方法


     //////////////////////////////////////////////////////////////
        ////   
        ////使用方法:只需将以下代码拷贝到项目的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);
  • 相关阅读:
    PAT乙级1014.福尔摩斯的约会 (20)(20 分)
    PAT乙级1013.数素数
    PAT乙级1012.数字分类 (20)(20 分)
    PAT乙级1011.A+B和C (15)(15 分)
    PAT乙级1025.反转链表 (25)
    PAT乙级1020.月饼(20)
    PAT乙级1015.德才论(25)
    PAT乙级1010.一元多项式求导(25)
    PAT乙级1009.说反话(20)
    PAT乙级1008.数组元素循环右移问题(20)
  • 原文地址:https://www.cnblogs.com/amwuau/p/6255441.html
Copyright © 2020-2023  润新知