2012-02-23 85 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。