部门有上级部门,希望能从数据库中查询出部门,及上级部门,然后动态生成树
怎么实现呢? for循环写不好,希望能有人提供代码参考 
谢谢

解决方案 »

  1.   

    //前几天做过,当时参考的例子。LZ可以看看,很长import   java.awt.*;   
      import   javax.swing.*;   
      import   javax.swing.table.*;   
      import   javax.swing.tree.*;   
      import   java.awt.event.*;   
        
      public   class   test7   extends   JFrame   {   
          JButton   bt=new   JButton("Change");   
          JTree   tree;   
          DefaultTreeModel   model;   
          MyTreeNode   node;   
          Object[][]   obj={{"root","D"},{"root","A"},{"root","B"},{"A","A1"},{"B","B1"},   
                  {"B","B2"},{"C","X"}};   
          Object[][]   obj2={{"x","1"},{"1","2"},{"2","3"}};   
          DoubleVector   dv=new   DoubleVector(obj,2);   
          JPanel   panel=(JPanel)this.getContentPane();   
        
          public   test7()   {   
              jbInit();   
          }   
          void   jbInit(){   
              Object[][]   o=dv.toDoubleArray();   
              node=new   MyTreeNode(o[0][0]);   
              node.setData(o);   
              model=new   DefaultTreeModel(node);   
              tree=new   JTree(model);   
              panel.setLayout(new   BorderLayout());   
              panel.add(new   JScrollPane(tree),BorderLayout.CENTER);   
              bt.addActionListener(new   ActionListener(){   
                  public   void   actionPerformed(ActionEvent   e){   
                      node=new   MyTreeNode(obj2[0][0]);   
                      node.setData(obj2);   
                      model.setRoot(node);   
                  }   
              });   
              panel.add(bt,BorderLayout.SOUTH);   
              this.setSize(400,300);   
              this.setVisible(true);   
          }   
          protected   void   processWindowEvent(WindowEvent   e)   {   
              super.processWindowEvent(e);   
              if   (e.getID()   ==   WindowEvent.WINDOW_CLOSING)   {   
                  System.exit(0);   
              }   
          }   
          public   static   void   main(String[]   args)   {   
              try   {   
                  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());   
              }   
              catch(Exception   e)   {   
                  e.printStackTrace();   
              }   
              test7   test7   =   new   test7();   
          }   
      }   
        
      class   MyTreeNode   extends   DefaultMutableTreeNode{   
          Object[][]   obj;   
          public   MyTreeNode(Object   o){   
              super(o);   
          }   
          public   void   setData(Object[][]   o){   
              obj=o;   
          }   
          public   boolean   isLeaf()   {   
              return   false;   
          }   
          public   int   getChildCount()   {   
              loadChildren();   
              return   super.getChildCount();   
          }   
          protected   void   loadChildren(){   
              TreeSet   set=new   TreeSet();   
              for(int   i=0;i<obj.length;i++){   
                  if(getUserObject().equals(obj[i][0])){   
                      set.add(obj[i][1]);   
                  }   
              }   
              for(int   i=0;i<set.size();i++){   
                  MyTreeNode   mtn=new   MyTreeNode(set.toArray()[i]);   
                  mtn.setData(obj);   
                  insert(mtn,i);   
              }   
          }   
      }   
      class   DoubleVector   extends   Vector{   
          private   Vector   data;   
          public   DoubleVector(){   
              data=new   Vector();   
          }   
          public   DoubleVector(Object[][]   obj,int   col){   
              data=new   Vector();   
              for(int   i=0;i<obj.length;i++){   
                  Vector   v=new   Vector();   
                  for(int   j=0;j<col;j++){   
                      v.add(obj[i][j]);   
                  }   
                  data.add(v);   
              }   
          }   
        
          public   int   getRowCount(){   
              return   data.size();   
          }   
          public   int   getColCount(){   
              if(!data.isEmpty()){   
                  return   ((Vector)data.get(0)).size();   
              }   
              else{   
                  return   0;   
              }   
          }   
          public   void   insertVector(Object   v){   
              data.add(v);   
          }   
          public   void   insertVector(Object   v,int   row){   
              data.insertElementAt(v,row);   
          }   
          public   boolean   removeVector(Object   v){   
              return   data.remove(v);   
          }   
          public   Object   removeVector(int   row){   
              return   data.remove(row);   
          }   
          public   void   set(Object   value,int   row,int   col){   
              Vector   temp=(Vector)data.get(row);   
              temp.set(col,value);   
          }   
          public   Object[][]   toDoubleArray(){   
              Object[][]   rt=new   Object[getRowCount()][getColCount()];   
              Vector   temp;   
              for(int   i=0;i<data.size();i++){   
                  temp=(Vector)data.get(i);   
                  for(int   j=0;j<temp.size();j++){   
                      rt[i][j]=temp.get(j);   
                  }   
              }   
              return   rt;   
          }   
      }   
      
      

  2.   

    DoubleVector不能用啊 没这个类
    而且我的是从数据库中获得数据存到数组当中去的
    不太明白
    LZ是什么意思?
      

  3.   


    --测试数据
    DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
    INSERT @t SELECT '001',NULL ,'山东省'
    UNION ALL SELECT '002','001','烟台市'
    UNION ALL SELECT '004','002','招远市'
    UNION ALL SELECT '003','001','青岛市'
    UNION ALL SELECT '005',NULL ,'四会市'
    UNION ALL SELECT '006','005','清远市'
    UNION ALL SELECT '007','006','小分市'--深度排序显示处理
    --生成每个节点的编码累计(相同当单编号法的编码)
    DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
    DECLARE @Level int
    SET @Level=0
    INSERT @t_Level SELECT ID,@Level,ID
    FROM @t
    WHERE PID IS NULL
    WHILE @@ROWCOUNT>0
    BEGIN
        SET @Level=@Level+1
        INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
        FROM @t a,@t_Level b
        WHERE a.PID=b.ID
            AND b.Level=@Level-1
    END--显示结果
    SELECT SPACE(b.Level*2)+'|--'+a.Name
    FROM @t a,@t_Level b
    WHERE a.ID=b.ID
    ORDER BY b.Sort
    /*--结果
    |--山东省
      |--烟台市
        |--招远市
      |--青岛市
    |--四会市
      |--清远市
        |--小分市
    --*/LZ可以试下用SQL直接写出来
      

  4.   

    楼主去找一下dtree树,很容易实现的!