Seez408: Dynamische Baumgenerierung - Typenproblem

Hallo,

ich bin gerade dabei aus Strings, welche Methoden aus einer Java-Applikation repräsentieren, dynamisch einen Baum zu erzeugen. Die Strings sind folgendermaßen aufgebaut:

"package1.package2...packageX.Klasse.Methode()"

Es handelt sich um ca. 1000 dieser Strings. Ich will nun einen nach dem anderen verarbeiten und an einen Baum hängen, wobei der erste String den Root bestimmt. Den ersten String kann ich auch wunderbar verarbeiten mit:

*********************************************************************
DefaultMutableTreeNode temp1 = null;
DefaultMutableTreeNode temp2 = null;
DefaultMutableTreeNode root = null;
private String inputArray[] = {
"de.metris.smartx.client.pflegetool.datamapping.draw.contrib.SmartXLayouter.calculateLayout()",
"de.metris.common.client.mja.core.util.MultipleHashtable.getValue()",
"de.metris.common.client.mja.core.util.subcomponentfinder.SubComponentFinder.getSubComponents()"};
StringTokenizer st = new StringTokenizer(inputArray[0],".");

public TreeDemo() {
 int h = st.countTokens();
        root = new DefaultMutableTreeNode(st.nextToken("."));
        temp2 = root;
        while (st.hasMoreTokens()){
            for (int i=0;i<h-1;++i){
            temp1 = new DefaultMutableTreeNode(st.nextToken("."));
            temp2.add(temp1);
            temp2 = temp1;
            }
        }
        neuerString();
********************************************************************

Dann hole ich den nächsten String rein und will ihn an den bisher generierten Baum hängen usw. Doch das bekomme ich irgendwie nicht hin!!

Hier der Code:
********************************************************************

private void neuerString() {
        int m = 1;
        StringTokenizer st1 = new StringTokenizer(inputArray[m],".");
        m = m + 1;
        s = (st1.nextToken());
        temp2 = root;
        checkNodes(st1);
    }
        //category1 = new DefaultMutableTreeNode(st.nextToken("."));
    private void checkNodes(StringTokenizer st1){
        while(st1.hasMoreTokens()){
            s = st1.nextToken(".");
            //System.out.println("s = "+s);
            int f = 0;
            f = temp2.getChildCount();
            //System.out.println("f = "+f);
            for ( int i = 0; i < f; i++ )
                {
                g = (temp2.getChildAt(i)).toString();
                //System.out.println("g = "+g);
                if (s.equals(g))
                    {
                    temp2.getChildAt(i);
                    //wie kann ich diesen KindKnoten in temp2 speichern??
                    //temp2 = temp2.getChildAt(i); -> Compilerfehler!!
                    //temp2 ist DefaultMutableTreeNode
                    //Der Rückgabewert von getChildAt() ist TreeNode
                    //Das Problem ist, dass ich den Knoten für das nächste Token brauche,
                    //also muss ich ihn irgendwie speichern oder markieren!!
                    }
                else
                    {
                    temp1 = new DefaultMutableTreeNode(s);
                    temp2.add(temp1);
                    //System.out.println("Ich bin else");
                    }
                checkNodes(st1);
            }
        }
    }
********************************************************************

Kann mir jemand helfen?

  1. speichern??

    //temp2 = temp2.getChildAt(i); -> Compilerfehler!!

    Du musst die Zuweisung entweder wieder Casten. Oder die zuweisung wo anderst hin machen.
    Einfacher und besser wäre es, wenn Du die Bearbeitung eh recursiv machst, eine Subfunktion an legen die sich selber wieder aufruft und das Entsprechende Opjekt übergibt.
    Hier kannst Du per Überlagerung sozusagen aucn Ojektunabhäng arbeiten.

    Gruss Matze