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實現遍歷樹形選單兩種實現程式碼分享java實現構造無限層級樹形選單Java遞迴如何正確輸出樹形選單Java樹形選單的建立java程式設計兩種樹形選單結構的轉換程式碼