虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Java编程 > Java构建树形菜单的实例代码(支持多级菜单)

Java构建树形菜单的实例代码(支持多级菜单)
类别:Java编程   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了Java构建树形菜单的实例代码(支持多级菜单),非常不错,具有参考借鉴价值,需要的朋友可以参考下

效果图:支持多级菜单。

菜单实体类:

    public class Menu {
    // 菜单id private String id;
    // 菜单名称 private String name;
    // 父菜单id private String parentId;
    // 菜单url private String url;
    // 菜单图标 private String icon;
    // 菜单顺序 private int order;
    // 子菜单 private List<Menu> children;
    // ... 省去getter和setter方法以及toString方法}

菜单一般需要排序,我们根据Menu的order字段进行排序:

     /* * 排序,根据order排序 */ public Comparator<Menu> order(){
    Comparator<Menu> comparator = new Comparator<Menu>() {
    @Override public int compare(Menu o1, Menu o2) {
    if(o1.getOrder() != o2.getOrder()){
    return o1.getOrder() - o2.getOrder();
    }
    return 0;
    }
    }
    ;
    return comparator;
    }

生成树的方法:

    public Map<String,Object> findTree(){
    Map<String,Object> data = new HashMap<String,Object>();
    try {
    //查询所有菜单 List<Menu> allMenu = menuDao.findTree();
    //根节点 List<Menu> rootMenu = new ArrayList<Menu>();
    for (Menu nav : allMenu) {
    if(nav.getParentId().equals("0")){
    //父节点是0的,为根节点。 rootMenu.add(nav);
    }
    }
    /* 根据Menu类的order排序 */ Collections.sort(rootMenu, order());
    //为根菜单设置子菜单,getClild是递归调用的 for (Menu nav : rootMenu) {
    /* 获取根节点下的所有子节点 使用getChild方法*/ List<Menu> childList = getChild(nav.getId(), allMenu);
    nav.setChildren(childList);
    //给根节点设置子节点 }
    /** * 输出构建好的菜单数据。 * */ data.put("success", "true");
    data.put("list", rootMenu);
    return data;
    }
    catch (Exception e) {
    data.put("success", "false");
    data.put("list", new ArrayList());
    return data;
    }
    }

获取子菜单:

    /** * 获取子节点 * @param id 父节点id * @param allMenu 所有菜单列表 * @return 每个根节点下,所有子菜单列表 */ public List<Menu> getChild(String id,List<Menu> allMenu){
    //子菜单 List<Menu> childList = new ArrayList<Menu>();
    for (Menu nav : allMenu) {
    // 遍历所有节点,将所有菜单的父id与传过来的根节点的id比较 //相等说明:为该根节点的子节点。 if(nav.ParentId().equals(id)){
    childList.add(nav);
    }
    }
    //递归 for (Menu nav : childList) {
    nav.setChildren(getChild(nav.getId(), allMenu));
    }
    Collections.sort(childList,order());
    //排序 //如果节点下没有子节点,返回一个空List(递归退出) if(childList.size() == 0){
    return new ArrayList<Menu>();
    }
    return childList;
    }

最后返回的JSON串如下:

    {
    "success": "true", "list": [ {
    "id": "1", "name": "Java", "parentid": "0", "url": "http://www.aliouchen.com", "order": 1, "children": [ {
    "id": "2", "name": "并发编程", "parentid": "1", "url": "http://www.aliouchen.com", "order": 1, "children": [] }
    , {
    "id": "3", "name": "多线程", "parentid": "1", "url": "http://www.aliouchen.com", "order": 2, "children": [ "id": "4", "name": "Thread", "parentid": "3", "url": "http://www.aliouchen.com", "order": 1,          "children":[] ] }
    ] }
    , {
    "id": "5", "name": "Python", "parentid": "0", "url": "http://www.aliouchen.com", "order": 2, "children": [] }
    ]}

总结

以上所述是小编给大家介绍的Java构建树形菜单的实例代码(支持多级菜单),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关热词搜索: java 树形菜单