今天写了一天的目录树,感觉到很吃力,不想c#那种直接弄一个TreeList控件或声明的,把父编号和编号属性设一下就生成了目录树,但是java需要自己动手去写,而且是从数据库生成的,后来和同事一起交流,把它做完了,所以把它记下来:

package com.hq.test; 
 

 import java.util.ArrayList; 
 

 import javax.swing.*; 
 
 import javax.swing.tree.DefaultMutableTreeNode; 
 
 import com.hq.domain.Unit; 
 
 import com.hq.service.UnitService; 
 
 public class TreeList extends JPanel{ 
 
 JTree jTree; 
 
 DefaultMutableTreeNode node; 
 
 DefaultMutableTreeNode shengNode; 
 
 DefaultMutableTreeNode shiNode; 
 
 DefaultMutableTreeNode xianNode; 
 
 DefaultMutableTreeNode xiangNode; 
 
 DefaultMutableTreeNode cunNode; 
 
 ArrayList<Unit> shengArrayList; 
 
 ArrayList<Unit> shiArrayList; 
 
 ArrayList<Unit> xianArrayList; 
 
 ArrayList<Unit> xiangArrayList; 
 
 ArrayList<Unit> cunArrayList; 
 
 UnitService unitService; 
 
 public TreeList(){ 
 
 //窗体window化 
 
 try { 
 
 UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName()); 
 
 } 
 
 catch ( Exception e ) { 
 
 System.out.println ("无法将界面设置为windows风格"); 
 
 } 
 
 //调用初始化树形结构的方法 
 
 initTree(); 
 
 } 
 
 public void initTree( ){ 
 
 //根节点 
 
 node=new DefaultMutableTreeNode("目录树管理", true); 
 
 //获得树形结构 
 
 getTree(node); 
 
 //添加到树结构 
 
 jTree=new JTree(node,true); 
 
 //添加滚动条 
 
 JScrollPane jsp=new JScrollPane(jTree); 
 
 this.add(jsp); 
 
 //this.setSize(300,900); 
 
 //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
 
 //this.setVisible(true); 
 
 } 
 
 public void getTree(DefaultMutableTreeNode node){ 
 
 //调用servic方法 
 
 unitService=new UnitService(); 
 
 //根据父编号获得所有数据 
 
 shengArrayList=unitService.getFatherId(null); 
 
 for(int i=0;i<shengArrayList.size();i++){ 
 
 //获得省级节点 
 
 shengNode=new DefaultMutableTreeNode(shengArrayList.get(i).getUnit_name(), true); 
 
 //添加到根节点 
 
 node.add(shengNode); 
 
 //以市的的编号为父编号进行查询 
 
 shiArrayList=unitService.getFatherId(shengArrayList.get(i).getUnit_id()); 
 
 for(int j=0;j<shiArrayList.size();j++){ 
 
 //获得市级得节点 
 
 shiNode=new DefaultMutableTreeNode(shiArrayList.get(j).getUnit_name(), true); 
 
 shengNode.add(shiNode);//添加到根节点 
 
 xianArrayList=unitService.getFatherId(shiArrayList.get(j).getUnit_id()); 
 
 for(int xian=0;xian<xianArrayList.size();xian++){ 
 
 //获县节点 
 
 xianNode=new DefaultMutableTreeNode(xianArrayList.get(xian).getUnit_name(), true); 
 
 shiNode.add(xianNode);//添加到根节点 
 
 //以县编号为父编号查询乡的数据 
 
 xiangArrayList=unitService.getFatherId(xianArrayList.get(xian).getUnit_id()); 
 
 for(int xiang=0;xiang<xiangArrayList.size();xiang++){ 
 
 //获得乡的数据 
 
 xiangNode=new DefaultMutableTreeNode(xiangArrayList.get(xiang).getUnit_name(), true); 
 
 xianNode.add(xiangNode);//添加到根节点 
 
 //以乡编号作为父编号查询村级信息 
 
 cunArrayList=unitService.getFatherId(xiangArrayList.get(xiang).getUnit_id()); 
 
 for(int cun=0;cun<cunArrayList.size();cun++){ 
 
 //存在子节点 
 
 if(unitService.getCount(cunArrayList.get(i).getUnit_id())>0){ 
 
 //获得村级 
 
 cunNode=new DefaultMutableTreeNode(cunArrayList.get(cun).getUnit_name(),true); 
 
 }else{//没有子节点 
 
 //获得村级 
 
 cunNode=new DefaultMutableTreeNode(cunArrayList.get(cun).getUnit_name(),false); 
 
 } 
 
 xiangNode.add(cunNode);//添加到根节点 
 
 } 
 
 } 
 
 } 
 
 } 
 
 } 
 

 } 
 
 public static void main(String[] args) { 
 
 new TreeList(); 
 

 } 
 

 } 
 
 数据库操作的service类的重要方法: 
 
 /** 
 
 * 返回Unit的对象信息 
 
 * @param father_id【父编号】 
 
 * @return 
 
 */ 
 
 public ArrayList<Unit> getFatherId(String father_id){ 
 
 this.father_id=father_id; 
 
 if(father_id!=null){ 
 
 sql="select * from unit where father_id='"+father_id+"'"; 
 
 }else{ 
 
 sql="select * from unit where father_id is null"; 
 
 } 
 
 rs=SqlHelper.executeQuery(sql,null); 
 
 ArrayList<Unit> lists = new ArrayList<Unit>(); 
 
 Unit unit; 
 
 try { 
 
 while(rs.next()){ 
 
 unit = new Unit(); 
 
 unit.setFather_id(rs.getString(3)); 
 
 unit.setUnit_name(rs.getString(2)); 
 
 unit.setUnit_id(rs.getString(1)); 
 
 lists.add(unit); 
 
 } 
 
 }catch(SQLException e){ 
 
 e.printStackTrace(); 
 
 }finally{ 
 
 SqlHelper.close(rs, SqlHelper.getPs(), SqlHelper.getCt()); 
 
 } 
 
 return lists; 
 
 } 
 
 /** 
 
 * 返回子节点的个数 
 
 * @param father_id【父编号】 
 
 * @return 
 
 */ 
 
 public int getCount(String father_id){ 
 
 String sql = "select count(*) from unit where father_id='"+father_id+"'"; 
 
 rs=SqlHelper.executeQuery(sql,null); 
 
 int count=0; 
 
 try{ 
 
 while(rs.next()){ 
 
 count = rs.getInt(1); 
 
 } 
 
 }catch(SQLException e){ 
 
 e.printStackTrace(); 
 
 } 
 
 finally{ 
 
 SqlHelper.close(rs, SqlHelper.getPs(), SqlHelper.getCt()); 
 
 } 
 
 return count; 
 
 }

参考知识库

C#知识库

254  关注 | 306  收录

虚拟现实(VR)知识库

603  关注 | 166  收录

Node.js知识库

403  关注 | 246  收录

算法与数据结构知识库

1875  关注 | 2466  收录