java树形菜单

递归方法实现

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class Tree {

	public static void main(String[] args) throws Exception {
		
		//获得所有菜单
		//List<TreeDTO> treeDatalist=Tree.getAllTreeDate();
		
		//指定菜单下的菜单
		String menuId="1";
		List<TreeDTO> treeDatalist=Tree.getTreeDateByMenuId(menuId);
		Tree.queryTreeData(treeDatalist);
	}	
	
	/****
	 * 遍历树
	 * @param treeDatalist
	 * @throws Exception
	 */
	public static void queryTreeData(List<TreeDTO> treeDatalist) throws Exception{
		StringBuffer sb=new StringBuffer();
		for(int i=0;i<treeDatalist.size();i++){
			TreeDTO treedto=treeDatalist.get(i);
			sb.append("[menuId:").append(treedto.getMenu_id()+",");
			sb.append("menuName:"+treedto.getMenu_name()+"]");
			sb.append("\n");
			//判断是否是叶子节点 
			String isleaf=treedto.getIs_leaf();
			if("YES".equalsIgnoreCase(isleaf)){
				//System.out.println("叶子节点");
			}else{
				List<TreeDTO> treeDatalist2 =Tree.getTreeDateByMenuId(treedto.getMenu_id());
				Tree.queryTreeData(treeDatalist2);
			}
		}
		System.out.println(sb.toString());
	}
	/****
	 * 获得所有的树形菜单
	 * @return
	 * @throws Exception
	 */
	public static List<TreeDTO> getAllTreeDate()throws Exception{
		
		String sql="select t.menu_id, t.menu_name,t.menu_code,t.parent,"+"decode(connect_by_isleaf,0,'No',1,'Yes') is_leaf,level,"+
				" sys_connect_by_path(t.menu_name,'/') path from smcs_menu t "+
				" start with t.parent = '1' connect by prior t.menu_id = t.parent";
//		System.out.println("sql===="+sql);
		List<TreeDTO> treeDatalist=Tree.getTreeDate(sql);
		return treeDatalist;
	}
	
	/****
	 * 根据 MenuId查询树形数据
	 * @return
	 * @throws Exception
	 */
	public static List<TreeDTO> getTreeDateByMenuId(String menuId)throws Exception{
		
		String sql=" select * from (select t.menu_id, t.menu_name,t.menu_code,t.parent,"+"decode(connect_by_isleaf,0,'No',1,'Yes') is_leaf,level,"+
				" sys_connect_by_path(t.menu_name,'/') path from smcs_menu t "+
				" start with t.parent =" +menuId+ "connect by prior t.menu_id = t.parent ) where parent ="+ menuId;
//		System.out.println("sql===="+sql);
		List<TreeDTO> treeDatalist=Tree.getTreeDate(sql);
		return treeDatalist;
	}
	
	
	/****
	 * 得到树形数据
	 * @param sql
	 * @return List<TreeDTO>
	 * @throws Exception
	 */
	public static List<TreeDTO> getTreeDate(String sql)throws Exception{
		
		List<TreeDTO> treeDatalist=new ArrayList<TreeDTO>();
		TreeDTO treedto=null;
		Connection conn=Tree.GetCon();
		PreparedStatement pstmt = conn.prepareStatement(sql);
		ResultSet rs = pstmt.executeQuery();
		while(rs.next()){
			treedto=new TreeDTO();
			//设置属性
			treedto.setMenu_id(rs.getString("menu_id"));
			treedto.setMenu_name(rs.getString("menu_name"));
			treedto.setMenu_code(rs.getString("menu_code"));
			treedto.setParent(rs.getString("parent"));
			treedto.setIs_leaf(rs.getString("is_leaf"));
			treedto.setLevel(rs.getString("level"));
			treedto.setPath(rs.getString("path"));
			//设置属性
			treeDatalist.add(treedto);
		}
		return treeDatalist;
	}
	
	/****
	 * 获得数据库连接
	 * @return
	 * @throws Exception
	 */
	public static Connection GetCon() throws Exception{
		Connection con=null;
		String url = "";
		String username ="admin";
		String password = "123456";
		Class.forName("oracle.jdbc.driver.OracleDriver");
		con = DriverManager.getConnection(url , username , password );
		return con;
	}
}


DTO

public class TreeDTO {
	private String menu_id;	
	private String menu_name;	
	private String menu_code;	
	private String parent;	
	private String is_leaf;	
	private String level;	
	private String path;
	/****
	set get 略
	****/
}


控制台输出

[menuId:101001,menuName:定点医疗机构信息维护]
[menuId:101002,menuName:定点医疗机构资格维护]
[menuId:101003,menuName:药品信息维护]
[menuId:101004,menuName:诊疗项目信息维护]

[menuId:102001,menuName:门诊特病申报]
[menuId:102002,menuName:门诊特病审批]

[menuId:103001,menuName:个人封锁解封]

[menuId:104001,menuName:中心报销]
[menuId:104002,menuName:报销审核]
[menuId:104003,menuName:取消报销]


Java漂亮的树形菜单制作实例(源码),森林状的关系图,文本域,用于显示点击的节点名称,使用了JTree,可以看作是一个jTree的用法演示实例。树形菜单应用广泛,这个Tree制作漂亮,相信会让很多朋友从中学习到实现的方法,效果如演示截图所示。下面是相关的代码片段:   DefaultMutableTreeNode root = new DefaultMutableTreeNode("设置"); //生成根节点   DefaultMutableTreeNode node1=new DefaultMutableTreeNode("常规"); //生成节点一   node1.add(new DefaultMutableTreeNode("默认路径")); //增加新节点到节点一上   node1.add(new DefaultMutableTreeNode("保存选项"));   root.add(node1); //增加节点一到根节点上   root.add(new DefaultMutableTreeNode("界面"));   root.add(new DefaultMutableTreeNode("提示声音"));   root.add(new DefaultMutableTreeNode("打印"));   JTree tree = new JTree(root); //得到JTree的实例   DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer(); //得到JTree的Renderer   renderer.setLeafIcon(null); //设置叶子节点图标为空   renderer.setClosedIcon(null); //设置关闭节点的图标为空   renderer.setOpenIcon(null); //设置打开节点的图标为空   tree.addTreeSelectionListener(new TreeSelectionListener() {//选择节点的事件处理   public void valueChanged(TreeSelectionEvent evt) {   TreePath path = evt.getPath(); //得到选择路径   String info=path.getLastPathComponent().toString(); //得到选择的节点名称   jtfInfo.setText(info); //在文本域中显示名称   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值