2012-02-23 71 views
1

下面的方法从字符串创建自定义数据树。如何从自定义树创建JPopupMenu

我正在研究一种生成带有许多子菜单的弹出式菜单的方法。基本上这些菜单动态给出,所以我有一个算法来处理使用下面的字符串创建子菜单。为了做到这一点,我通过使用分隔符分割将此字符串转换为Java自定义树。

public class MenuItem { 

    public String Name; 
    public Vector<MenuItem> Childeren; 


    public MenuItem() { 
     Name = ""; 
     Childeren = new Vector<MenuItem>(); 
    } 

    public MenuItem(String name) { 
     this(); 
     Name = name; 
    } 


    public String toString() { 
     return Name + " " + Childeren ; 
    } 
} 


public static int createNode(StringTokenizer p_jTokenizer, MenuItem p_iParent) { 
    int nCount = 0; 

    while(p_jTokenizer.hasMoreTokens()) { 
     String strToken = p_jTokenizer.nextToken(); 

     MenuItem iItem = new MenuItem(); 

     if(strToken.endsWith("[")) {   
      strToken = strToken.substring(0, strToken.length() - 1); 
      nCount = createNode(p_jTokenizer, iItem); 
     }   

     while(strToken.endsWith("]")) { 
      nCount++; 
      strToken = strToken.substring(0, strToken.length() - 1);    
     } 

     iItem.Name = strToken;   
     p_iParent.Childeren.add(iItem); 

     while(nCount > 0) { 
      return --nCount; 
     } 
    } 
    return nCount; 
} 
我解析动态字符串值的

为例:

字符串str = “菜单1;菜单2 [; Menu2A; Menu2B [; Menu2B-A; Menu2B-B]];菜单3;”;

目前的方法创建一个树形像下面的结构:

       Pop-up Menu 
          / |  \ 
         Menu1 Menu2 Menu3 
          / | 

          Menu2A  Menu2B 
             |  \ 
             |  \ 
            Menu2B-A Menu2B-B 

我坚持就如何基于此树子菜单创建JPopupMenu的。我想使用递归方式,但不知道要走哪条路。

+0

从弹出窗口出来的多级菜单。听起来像是一个'无法使用的GUI'。 – 2012-02-23 22:15:48

回答

1

遍历树结构。如果一个元素是节点创建JMenu,如果它是叶创建JMenuItem所有的孩子添加到JMenu。