2012-02-23 3 views
1

以下のメソッドは、A Stringからカスタムデータツリーを作成します。カスタムツリーから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; 
} 

アン例Iが解析動的ストリング値:

文字列str = "メニュー1、メニュー2 [; Menu2A; Menu2B [; Menu2B-A; Menu2B-B]]; MENU3;";

現在の方法では、ツリー構造以下のように作成されます。

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

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

私はこの木に基づいてサブメニューでのPopupMenuを作成する方法に引っかかっています。私は再帰的な方法を使用すると思うが、どちらの方法に行くのか分からない。

+0

マルチレベルのメニューがポップアップから出てきます。作成時に「使用できないGUI」のように聞こえます。 –

答えて

1

ツリー構造を繰り返します。要素がノードである場合JMenuはリーフを作成するJMenuItemはすべての子をJMenuに追加します。

関連する問題