Java 如何从自定义树创建JPopupMenu

Java 如何从自定义树创建JPopupMenu,java,swing,jpopupmenu,jmenu,Java,Swing,Jpopupmenu,Jmenu,下面的方法从字符串创建自定义数据树 我正在研究一种方法,可以生成带有许多子菜单的弹出式菜单。基本上,这些菜单是动态给定的,所以我有一个算法来处理使用下面的字符串创建子菜单。为了做到这一点,我使用分隔符将这个字符串转换成Java自定义树 public class MenuItem { public String Name; public Vector<MenuItem> Childeren; public MenuItem() { Name

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

我正在研究一种方法,可以生成带有许多子菜单的弹出式菜单。基本上,这些菜单是动态给定的,所以我有一个算法来处理使用下面的字符串创建子菜单。为了做到这一点,我使用分隔符将这个字符串转换成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;
}

我一直在研究如何基于此树创建带有子菜单的JPopUpMenu。我考虑使用递归方式,但不确定该采用哪种方式。

遍历树结构。如果元素是node create JMenu,如果是leaf create JMenuItem,则将所有子元素添加到JMenu。

遍历树结构。如果元素是node create JMenu,如果元素是leaf create JMenuItem,则将所有子元素添加到JMenu。

弹出的多级菜单。听起来像是一个“无法使用的图形用户界面”正在制作一个弹出的.Mulit级菜单。听起来像是一个正在制作中的“无法使用的GUI”。
                             Pop-up Menu
                             /    |     \
                       Menu1    Menu2   Menu3
                             /     | 

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