2012-12-18 105 views
1

我有兩個字符串node1/node2/node3/node4「和」node1/node2/node5/node6「....我怎樣才能建立一個從這個字符串swing?這是我的代碼即建立一個字符串....從字符串構建JTree

import java.awt.*; 
import java.util.ArrayList; 

import javax.swing.*; 
import javax.swing.tree.*; 

public class PathTest 
{ 
    public PathTest() 
    { 

    DefaultMutableTreeNode node = buildNodeFromString(); 


     DefaultTreeModel model = new DefaultTreeModel(node); 
     JTree tree = new JTree(model); 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(tree); 
     f.setSize(300,300); 
     f.setLocation(200,200); 
     f.setVisible(true); 
    } 

private DefaultMutableTreeNode buildNodeFromString() { 



String qqq= "node1/node2/node3/node4"; 
DefaultMutableTreeNode node, lastNode = null, root = null; 

    String[] s = qqq.split("/"); 
    for (String str : s) { 
    node = new DefaultMutableTreeNode(str);  
    if (root == null) 
     root = node; 
    if (lastNode != null) 
     lastNode.add(node); 
    lastNode = node; 
    } 

return root; 
} 

    public static void main(String[] args) 
    { 
     new PathTest(); 
    } 
} 

回答

3

嘗試了這一點,這代碼爲樹創建一個根,然後開始在其下添加字符串,如果您不想讓該根顯示,只需撥打電話tree.setRootVisible(false);

import java.util.Enumeration; 

import javax.swing.JFrame; 
import javax.swing.JTree; 
import javax.swing.tree.DefaultMutableTreeNode; 
import javax.swing.tree.DefaultTreeModel; 

public class PathTest { 
    public PathTest() { 
     // Create the root node, I'm assuming that the delimited strings will have 
     // different string value at index 0 
     DefaultMutableTreeNode root = new DefaultMutableTreeNode("ROOT"); 

     // Create the tree model and add the root node to it 
     DefaultTreeModel model = new DefaultTreeModel(root); 

     // Create the tree with the new model 
     JTree tree = new JTree(model); 

     // Build the tree from the various string samples 
     buildTreeFromString(model, "Node 1/Node 2/Node 3/Node 4"); 
     buildTreeFromString(model, "Node 1/Node 2/Node 3/Node 5"); 
     buildTreeFromString(model, "Node 1/Node 2/Node 3/Node 6"); 
     buildTreeFromString(model, "Node 1/Node 2/Node 4/Node 5"); 
     buildTreeFromString(model, "Node 1/Node 1/Node 3/Node 5"); 

     // UI 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(tree); 
     f.setSize(300, 300); 
     f.setLocation(200, 200); 
     f.setVisible(true); 
    } 

    /** 
    * Builds a tree from a given forward slash delimited string. 
    * 
    * @param model The tree model 
    * @param str The string to build the tree from 
    */ 
    private void buildTreeFromString(final DefaultTreeModel model, final String str) { 
     // Fetch the root node 
     DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot(); 

     // Split the string around the delimiter 
     String [] strings = str.split("/"); 

     // Create a node object to use for traversing down the tree as it 
     // is being created 
     DefaultMutableTreeNode node = root; 

     // Iterate of the string array 
     for (String s: strings) { 
      // Look for the index of a node at the current level that 
      // has a value equal to the current string 
      int index = childIndex(node, s); 

      // Index less than 0, this is a new node not currently present on the tree 
      if (index < 0) { 
       // Add the new node 
       DefaultMutableTreeNode newChild = new DefaultMutableTreeNode(s); 
       node.insert(newChild, node.getChildCount()); 
       node = newChild; 
      } 
      // Else, existing node, skip to the next string 
      else { 
       node = (DefaultMutableTreeNode) node.getChildAt(index); 
      } 
     } 
    } 

    /** 
    * Returns the index of a child of a given node, provided its string value. 
    * 
    * @param node The node to search its children 
    * @param childValue The value of the child to compare with 
    * @return The index 
    */ 
    private int childIndex(final DefaultMutableTreeNode node, final String childValue) { 
     Enumeration<DefaultMutableTreeNode> children = node.children(); 
     DefaultMutableTreeNode child = null; 
     int index = -1; 

     while (children.hasMoreElements() && index < 0) { 
      child = children.nextElement(); 

      if (child.getUserObject() != null && childValue.equals(child.getUserObject())) { 
       index = node.getIndex(child); 
      } 
     } 

     return index; 
    } 

    public static void main(String[] args) { 
     new PathTest(); 
    } 
} 

希望這會有所幫助。

3
for (String str : s) { 
    node = new DefaultMutableTreeNode(str);  
    if (root == null) 
     root = node; 
    if (lastNode != null) 
     lastNode.add(node); 
    lastNode = node; 
} 

中的代碼片段,而不是創建新DefaultMutableTreeNode實例檢查lastNode whethe它已經有一個同名的孩子。

+0

它會是什麼樣子? – neklans