2017-07-18 6 views
0

Ich habe eine Reihe von Fragen bereits gefragt, aber habe noch keine solide Antwort zu sehen. Ich versuche, die Auswahl auf einem jTree in dem Versuch, eine Art API für mein Java-Projekt zu erstellen. Ich kann Auswahl auf einem Elternknoten leicht mit sagen: myTree.setSelection (1);Wie programmgesteuert Auswahl auf einem jTree Kind

Probleme mit irgendwelchen Blättern aus Kindknoten. Ich habe eine Walk-Funktion und ich suche nach einer bestimmten Saite. Ich habe es geschafft, ein Objekt [] zurückzugeben, wenn ich den Knoten mit der gesuchten Zeichenfolge erreiche. Aber ich kann es nicht in einen Treepath konvertieren, um myTree.setSelectionPath (Pfad) zu verwenden. Kann mir jemand dabei helfen? Ich schätze es.

//My call 
TreeModel model = jTree1.getModel(); 
     Object getNode = myWalk(model); 
     jTree1.setSelectionPath((TreePath) getNode); 
     //this throw an error stating that Object[] can't be converted to a path. 

public Object[] myWalk(TreeModel model, String s, String t){ 
     DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot(); 
     DefaultMutableTreeNode child; 
     TreeNode[] returnPath = null; 
     int childrenCount = root.getChildCount(); 
     for(int i = 0; i < childrenCount; i++){ 
      child = (DefaultMutableTreeNode) root.getChildAt(i); 
      if(child.toString().equals(s)){ 
       System.out.println(child.toString()); 
       int secondChildCount = child.getChildCount(); 
       DefaultMutableTreeNode secondLevelChild; 
       for(int y = 0; y < secondChildCount; y++){ 
        secondLevelChild = (DefaultMutableTreeNode) child.getChildAt(y); 
        if(secondLevelChild.toString().equals(t)){ 
         System.out.println(secondLevelChild.toString()); 
         returnPath = secondLevelChild.getPath(); 
         //returnPath = new TreePath(new Object[] {root.toString(), child.toString(), secondLevelChild.toString()}); 
        } 
       } 

      } 


     } 
     return returnPath; 
    } 
+1

Es gibt eine setSelectionPath ist, die eine TreePath nimmt. Da Sie zuerst die Baumtiefe scannen, können Sie den TreePath einfach rekursiv aufbauen. –

Antwort

0

So war die Lösung am Ende einfach. Ich muss nur ein neues TreePath mit und Object Array erstellen (was ich nicht gemacht habe).

So würde es wie folgt aussehen:

TreeModel model = jTree1.getModel(); 
Object[] getNode = Walk(model, "sports", "basketball"); 
TreePath tPath = new TreePath(getNode); 
jTree1.setSelectionPath(tPath); 
Verwandte Themen