2014-11-25 23 views
0

有关于如何处理java中的n级菜单和ui中的进一步迭代的问题。(N)用于在UI中迭代的多级菜单数据结构

下面是MENU

ID MENU_NAME PARENT_ID
1 MAIN1空
2 BANK1 1
3 TEST1 2
4 TEST2 2
5 TEST3 2
6 BANK2数据库表中的数据1
7 test4 6
8 test5 6
9 TEST6 6

类菜单被用作模型为菜单

public class Menu { 

    private int id; 

    private String menuName; 

    private int parentId; 
} 

从数据库中检索到的数据被存储在ArrayList<Menu>

的问题是如何以表示从数据库中提取的n级菜单作为Java对象或数据结构检索,它将捕获n级菜单并为UI简单迭代并显示多级菜单导航列表。

代码需要是通用的各级并且应该EN-企业各级容易

回答

0

这里的问题应该分解为两部分:建筑菜单和访问菜单。结果菜单有效定向非循环图或树。每个菜单项是此树节点:

package my.menu; 
import java.util.LinkedList; 

public class MenuNode{ 
    private MenuNode parent; 
    private LinkedList<MenuNode> children; 

    private String name; 
    private int id; 

    public MenuNode(String name, int id) { 
     this.name = name; 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public int getId() { 
     return id; 
    } 

    public MenuNode getParent() { 
     return parent; 
    } 

    public void setParent(MenuNode parent) { 
     this.parent = parent; 
    } 

    public void addChild(MenuNode child) { 
     children.add(child); 
     child.setParent(this); 
    } 

    public LinkedList<MenuNode> getChildren() { 
     return children; 
    } 
} 

1.构建菜单

你必须从数据库的一些列表,你应该分析和获取的对象,代表菜单。解析器一行一行地创建新的菜单节点。然后解析器应该在现有树中的某处插入这个全新的节点。虽然我们可以使用深度优先或宽度优先的方法从根目录搜索每个时间,但是将附加节点存储在HashMap中会更加有效,特别是如果我们的菜单结构很大。因此,我们需要MenuTree和解析器:

package my.menu; 
import java.util.LinkedList; 
import java.util.HashMap; 

public class MenuTree{ 
    private HashMap<Integer, MenuNode> menuMap; 

    public void addNode(MenuNode node) { 
     MenuNode parent = menuMap.get(node.getParent()); 
     if (parent != null) { 
      parent.addChild(node); 
     }   
    } 

    public void parse(LinkedList<Menu> input) { 
     for (Menu entry : input) { 
      MenuNode node = new MenuNode(entry.id, entry.name); 
      MenuNode parent = menuMap.get(entry.parentId); 
      if (parent != null) { 
       parent.addChild(node); 
      } 
      menuMap.put(node.getId(), node); 
     } 
    } 
} 

2。访问菜单

现在我们可以遍历菜单通过检索的MenuNodechildren LinkedList的或通过添加一些方法MenuTree遍历menuMap。这取决于我们正在努力解决的任务。

0

你可以保存不同层次不同arrayList菜单。然后对于每个菜单检查其parentId与当前parentId被迭代。如果它们匹配显示subMenu否则通过。这样你可以创建嵌套的多级菜单。

您可以使用包含parentMenu关键和subMenu的ArrayList作为价值的地图。 Map<ParentMenu, List<String>>。但如果你只有两级菜单,那么这是一个很好的解决方案。超过两个级别,它变得笨拙。

+0

需要一个通用的解决方案 – shashi27 2014-11-25 09:36:05