Java构建树形菜单的实例代码(支持多级菜单)

2025-05-29 0 82

效果图:支持多级菜单。

Java构建树形菜单的实例代码(支持多级菜单)

菜单实体类:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17
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字段进行排序:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15
/*

* 排序,根据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;

}

生成树的方法:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32
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;

}

}

获取子菜单:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27
/**

* 获取子节点

* @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串如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45
{

"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构建树形菜单的实例代码(支持多级菜单),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对快网idc网站的支持!

原文链接:http://www.cnblogs.com/chenhao-/archive/2017/09/04/7472353.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java构建树形菜单的实例代码(支持多级菜单) https://www.kuaiidc.com/114699.html

相关文章

发表评论
暂无评论