精华内容
下载资源
问答
  • 菜单树
    千次阅读
    2021-12-03 21:25:20

    后台根据数据库中的菜单表返回链表形式的多层结构,也就是菜单树,可以使用递归形式和嵌套for循环形式。本文只是模拟展示其思路。

    数据库

     简单形式的菜单表,整个菜单树有三层,0层1有两个子菜单 1层2 和 1层4,而1层2又有两个子菜单2层1和2层2。show_order可以控制同一菜单下的子菜单的顺序。

    public class Menu {
        private Long id;
        private String name;
        private String url;
        private Long pId;
        private Long showOrder;
        private List<Menu> childList = new ArrayList<Menu>();
    
    
        @Override
        public String toString() {
            return "Menu{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", url='" + url + '\'' +
                    ", pId=" + pId +
                    ", showOrder=" + showOrder +
                    ", childList=" + childList +
                    '}';
        }
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getUrl() {
            return url;
        }
    
        public void setUrl(String url) {
            this.url = url;
        }
    
        public Long getpId() {
            return pId;
        }
    
        public void setpId(Long pId) {
            this.pId = pId;
        }
    
        public Long getShowOrder() {
            return showOrder;
        }
    
        public void setShowOrder(Long showOrder) {
            this.showOrder = showOrder;
        }
    
        public List<Menu> getChildList() {
            return childList;
        }
    
        public void setChildList(List<Menu> childList) {
            this.childList = childList;
        }
    }
    

    以上代码是菜单表的实体类。

    具体实现方法如下,分为两种:

    1.递归形式:解释在代码中

    public List<Menu> menuShow(){
        
        Menu menu = new Menu();
        //同数据库保持一致,一般将首层菜单的父菜单id设为0;
        menu.setId(0);
        getChilds(menu);
        return menu.getChildList();
    }
    
    public void getChilds(Menu parent){
        //这里通过service层和mapper层实现,传参当前id,也就是sql查询结果是p_id为当前id的数据,并且按show_order升序写入数组。
        List<Menu> childList = menuService.selectChildList(parent.getId());
        for(Menu child:=childList ){
            //递归本方法,找子菜单的子菜单。
            getChilds(child);
        }
        //将子菜单数组写入。
        parent.setChildList(childList);
        //不需要写递归跳出判断,childList 为空时就会跳出。
    }

    2.嵌套for循环形式:

    嵌套一层for循环是了找出那些非0层菜单的父菜单并建立联系。

    public List<Menu> menuShow(){
    
        List<Menu> childList = new ArrayList<Menu>();
        //直接查询菜单表中的所有数据并按show_order升序存入链表
        List<Menu> originList = menuService.selectList();
        //遍历初始链表找每一个菜单的父菜单
        for(Menu menu : originList ){
        
            Menu temp = menu;
            //0层菜单直接加入结果数组
            if(menu.getId() == 0){
                childList.add(menu);
            }else{
                //非0层通过遍历原始数组找到其父菜单,并将其加入其父菜单的子菜单数组,完成break,不    做无意义之事。
                for(Menu origin: originList){
                    if(temp.getpId().equals(origin.getId())){
                        //这里不可以直接添加元素,因为初始为空
                        if(origin.getChildList() == null){  
                            List<Menu> m = new ArrayList<>();
                            m.add(temp);
                            origin.setChildList(m);
                        }else{
                            origin.getChildList().add(m)
                        }
                        
                        break;
                    }
                }
            }
        }
        
        return childList;
    
    }

    更多相关内容
  • 菜单树形结构,支持三级、多级树形结构代码,纯手写代码,简单易懂,适合各个阶段试用,支持jquery调用。
  • vue实现下拉菜单树

    2021-01-18 16:30:35
    本文实例为大家分享了vue实现下拉菜单树的具体代码,供大家参考,具体内容如下 效果:使用 Vue-Treeselect 实现 建议通过npm安装vue-treeselect,并使用webpack之类的捆绑器来构建您的应用程序。 npm install --...
  • 递归查询菜单树,支持mysql,oracle,含表结构,递归查询菜单,支持mysql,oracle,含表结构递归查询菜单。
  • 本文通过实例给大家介绍了vue.js与element-ui实现菜单树形结构,非常不错,具有参考借鉴价值,需要的朋友可以参考下
  • mybatis递归查询菜单树

    2018-05-30 16:45:43
    mybatis递归查询菜单树.zip,mybatis递归查询菜单树,department.sql,boot_mybatis.zip
  • 实现效果: ... Query可任意拖拽排序菜单树机构树特效代码,基于jQuery插件sortable-lists.min.js实现排序,功能 非常强大,自动识别放在层级,非常适合菜单机构方便调整,直接拖拽就行了。
  • jQuery可任意拖拽排序机构菜单树,菜单可任意拖动。
  • Delphi结合XML文件生成菜单树的例子,调用XML文件生成树形菜单,里面包括了解析XML文件的单元类。类中相关描述:FBufferPtr 为缓冲区的地址,每次将 XmlStr 以 FBufferPtr 保存进缓冲区,之后 FBufferPtr L。若 ...
  • 动态生成菜单树

    2013-11-07 18:13:15
    根据从数据库查询出来的信息
  • jQuery可任意拖拽排序机构菜单树,菜单可任意拖动。
  • 今天小编就为大家分享一篇Layui tree 下拉菜单树的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 通过对js构造菜单树的思路分析,写出java的菜单树构造的工具类,可以生成你想要的菜单树!! 仅供学习!
  • layui做的后台首页,左侧菜单树和顶部菜单树都有,只需引入layui.css和js即可
  • 主要为大家详细介绍了Jquery树插件zTree实现菜单树,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 内容索引:C#源码,菜单窗体,菜单 形展开的C#菜单控件,可三级展开收起菜单目录项,一个经典的TreeView使用示例,TreeView也是大家在平时编程中经常使用的一个菜单控件,既美观,又习惯操作,很多朋友...
  • 一个菜单,主要是用js写的供大家学习参考。
  • oracle菜单树查询

    2015-01-17 15:25:56
    oracle菜单树查询 使用实例 使用START WITH CONNECT BY PRIOR子句实现递归查询
  • java遍历菜单树形菜单(父子级菜单)

    千次阅读 2022-04-13 21:26:23
    //存放父级菜单 }else {//pid不是0的话menuCl对象就是子级就走else for (MenuCls cl : menuCls) { if (menuCl.getPId()==cl.getMId()){//根据menuCl的pid(走else了就是子级)==cl的mid(它是父级)判断该菜单是哪个父级...

    一般做这种父子级的遍历都用递归,可是对于新手来说不会用递归,不好理解,下面用纯for循环来解决一下,很简单的!

    1.实体类

    public class MenuCls {
    
        private Integer mId;
        private Integer pId;
        private String mName;
        private String path;
        private Boolean open=true;
        private Boolean checked=false;
        private List<MenuCls> children = new ArrayList<MenuCls>();
    }

    2.业务逻辑层

    List<MenuCls> childrenMenuClsList(){
            //创建一个新的集合重新存放数据
            List<MenuCls> menuClsList=new ArrayList<>();
            //查询全部父子级菜单
            List<MenuCls> menuCls = menuClsService.childrenMenuClsList();
            //遍历查询
            for (MenuCls menuCl : menuCls) {
                if (menuCl.getPId()==0){//先判断父级(判断pid==0,是0就是父级)说明menuCl对象是父级
                    menuClsList.add(menuCl);//存放父级菜单
                }else {//pid不是0的话menuCl对象就是子级就走else
                    for (MenuCls cl : menuCls) {
                        if (menuCl.getPId()==cl.getMId()){//根据menuCl的pid(走else了就是子级)==cl的mid(它是父级)判断该菜单是哪个父级菜单的子菜单,并存放到父级菜单里面
                            cl.getChildren().add(menuCl);
                            break;
                        }
                    }
                }
            }
            return menuClsList;
        }

    3.数据库参考(父级菜单有8个)

     4.结果

     

     

    展开全文
  • 菜单树(树数据结构+JSP页面递归调用构建菜单树
  • 无限级菜单树

    2018-11-14 10:01:40
    javascript ,jquery就够了无需太麻烦的库,简洁美观,只需传入json对象,即可生成无限级菜单
  • 主要介绍了java实现遍历菜单两种实现代码分享,两种实现:OpenSessionView实现、TreeAction实现。具有一定参考价值,需要的朋友可以了解下。
  • C# winform TreeView菜单控件DEMO附配套数据库文件 【VS2008】+【SQL Sever 2005】 温馨提示:下载完了回复一下就能把分数再赚回去哟~
  • c#winform菜单树使用背景图.zip 用的时候把图片地址换下 直接可以使用 非常好用的c#winform菜单树使用背景图
  • 摘要:VC/C++源码,数据库应用,树控菜单,树形菜单 一个可显示三级的VC++菜单树源码,树控菜单应用范例,也就是大家俗称的“树形菜单”,可一级一级展开,像树枝一样展开,有的树控菜单可显示无限级,有的是定级的,本...
  • 菜单树JQUERY

    2011-10-20 11:57:07
    菜单树JQUERY菜单树JQUERY菜单树JQUERY菜单树JQUERY菜单树JQUERY菜单树JQUERY菜单树JQUERY菜单树JQUERY菜单树JQUERY菜单树JQUERY菜单树JQUERY菜单树JQUERY菜单树JQUERY菜单树JQUERY菜单树JQUERY菜单树JQUERY菜单树...
  • 475菜单树!

    2014-03-09 21:11:04
    475菜单树-中文翻译版.pdf
  • jQuery可任意拖拽排序菜单树机构树特效代码,基于jQuery插件sortable-lists.min.js实现排序,功能 非常强大,自动识别放在层级,非常适合菜单机构方便调整,直接拖拽就行了。
  • 一、介绍 在Axure RP中,说的就是形小部件,树型小部件最常用于模拟文件浏览器和可视化其他层次结构。单击小部件的各个节点可以在页面上显示不同的小部件,或者在项目中打开不同的页面。 但是自带的不怎么...

    一、树介绍

    在Axure RP中,说的就是树形小部件,树型小部件最常用于模拟文件浏览器和可视化其他层次结构。单击树小部件的各个节点可以在页面上显示不同的小部件,或者在项目中打开不同的页面。
    在这里插入图片描述
    但是自带的树不怎么好用,比如不能修改间距,很多想要的样式都不能实现。鉴于此,我们很有必要自己实现树结构。

    □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □

    二、创建树

    ①新建一个页面
    ②创建菜单item
    在这里插入图片描述
    □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □

    三、树点击交互

    树最明显的特征体现在他的点击交互上,即点击父节点子节点会自动收缩,下面的节点收缩后,其下紧跟着的节点自动跟随。

    下面就实现这样的交互


    ①子菜单转动态面板

    这样的目的是为了将所有子菜单组合起来。

    动图如下(看不清的话点击放大)

    在这里插入图片描述


    ②点击主菜单隐藏/显示子菜单

    这个步骤的目的是实现收缩、展开子菜单

    在这里插入图片描述


    ③子菜单隐藏时后面的主菜单(这里指菜单B)上移
    这个步骤的目的是实现收缩、展开子菜单时,后面跟随的菜单上移补位。
    比如A收缩子菜单A1时,B菜单移动到A的下面。A1展开时,B就往下推。
    原理:A1隐藏时,B移动到A1上方;A1显示时,B移动到A1下方
    在这里插入图片描述
    说明:

    这个步骤相对复杂一点,主要是用到了变量。变量 用 [[变量]]表示。这里用到了元件的方位变量
    top:表示上方
    bottom:表示下方
    left:表示左方
    right:表示右方

    添加变量时最常用的 是当前元件目标元件,当前元件表示在工作区选择操作的元件,目标元件是在交互动作中选择的的元件


    ④主菜单移动时子菜单跟着移动
    这个步骤的目的是当主菜单移动时,已经展开了的子菜单跟着移动
    比如,在上一步骤A收缩时,B会上移紧贴A,但是B1却没有跟着移动,这个步骤就是实现这个功能。
    原理:一个元素移动,设置另一个元素跟着移动。
    在这里插入图片描述


    ⑤最后的效果
    同样的方式,把给B菜单添加交互,使得C跟着移动即可。最后得到
    在这里插入图片描述
    在这里插入图片描述

    □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □

    四、最后

    两个场景:
    1、父节点点击,子节点【隐藏、显示】
    2、相邻节点【隐藏、显示】引起当前节点的位置移动。
    由此可知,需要掌握的交互就是【隐藏、显示】交互,【移动】交互。

    完毕,更多教程请进入系列
    …开篇:Axure RP 9操作界面介绍【教程一】
    上一篇:Axure RP 9弹窗创建与实现【教程四】

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 128,069
精华内容 51,227
关键字:

菜单树

友情链接: lec0.zip