Как создать JPopupMenu из собственного дерева - PullRequest
1 голос
/ 24 февраля 2012

Приведенный ниже метод создает пользовательское дерево данных из строки.

Я работаю над методом, который создает всплывающее меню со многими подменю.В основном эти меню приведены динамически, поэтому у меня есть алгоритм для обработки создания подменю с использованием приведенной ниже строки.Для этого я преобразую эту строку в Java Custom Tree, разделив ее с помощью разделителя.

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;
}

Пример динамических строковых значений, которые я анализирую:

String str = "Menu1; Menu2 [; Menu2A; Menu2B [; Menu2B-A; Menu2B-B]]; Menu3; ";

Текущий метод создает дерево, как показано ниже:

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

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

Я застрял на том, как создать JPopUpMenu с подменю на основе этого дерева.Я думаю об использовании рекурсивного пути, но не уверен, каким путем идти.

1 Ответ

1 голос
/ 24 февраля 2012

Итерация по древовидной структуре. Если элемент является узлом, создайте JMenu, если это лист, создайте JMenuItem и добавьте всех потомков в JMenu.

...