2012-04-04 4 views
4

SQL 쿼리에서 가져올 2 차원 객체 배열에서 JTree를 만들고 싶습니다. 여기 SQL 쿼리로 채워지는 Java Jtree

Object[][] table = { 
     {1, 0, "Root"}, //i=0 
     {2, 1, "Node2"}, //i=1 
     {3, 1, "Node3"}, //i=2 
     {4, 1, "Node4"}, //i=3 
     {5, 4, "Node5"}, //i=4 
     {6, 4, "Node6"}, //i=5 
     {7, 4, "Node7"}, //i=6 
     {8, 1, "Node8"}, //i=7 
     {9, 1, "Node9"}, //i=8 
     {10, 9, "Node10"},}; //i=9 

내가 배열을 정렬하는 데 사용하는 논리입니다 :

여기에 개체의 샘플은 다음과 같습니다

for (int i = 0; i < table.length; i++) { 
     for (int j = i; j < table.length; j++) { 
      if (table[i][0] == table[j][1]) { 
       System.out.println(table[i][2].toString() + " is parent of " + table[j][2].toString()); 
      } 
     } 
    } 

이 무엇 위이며이 같은 SQL 테이블 모습입니다 콘솔에 표시 :

Root is parent of Node2 
Root is parent of Node3 
Root is parent of Node4 
Root is parent of Node8 
Root is parent of Node9 
Node4 is parent of Node5 
Node4 is parent of Node6 
Node4 is parent of Node7 
Node9 is parent of Node10 

내가 할 수있는 TreeModel, HashTable, Object 등을 만드는 데 어려움이 있습니다. JTree를 만드는 데 사용하십시오.

나는이 문제에 1 주일 이상 붙어있어 다른 사람의 경험을 실제로 사용할 수 있습니다.

+3

겠습니까를 해결하기 위해 사용되는 코드이다'Outline' (http://codereview.stackexchange.com/a/4447/6692) 될 관심? – trashgod

답변

2

저는 Java에 익숙하지 않기 때문에이 문제에 대한 연구를해야했습니다. 연구는 정말 시간이 많이 걸렸습니다. 다음 링크에는 SQL 데이터에서 JTree를 생성하는 최상의 솔루션이 있다는 것을 알게되었습니다. 여기

https://forums.oracle.com/forums/thread.jspa?threadID=2225475

제가

문제
class myTree extends JPanel { 

private DefaultMutableTreeNode rootNode; 
private DefaultTreeModel treeModel; 

public myTree() { 

    super(new GridLayout(1, 1)); //Set the layout for the panel that the jtree. 

    //The following object is a sample from a database and was used to validate 
    //the solution below. Make sure the table is properly sorted before you create the 
    //the object from the query. 
    Object[][] table = { 
     {1, null, "Root"}, //i=0 
     {2, 1, "Node2"}, //i=1 
     {3, 2, "Node3"}, //i=2 
     {4, 3, "Node4"}, //i=3 
     {5, 4, "Node5"}, //i=4 
     {6, 5, "Node6"}, //i=5 
     {7, 6, "Node7"}, //i=6 
     {8, 1, "Node8"}, //i=7 
     {9, 1, "Node9"}, //i=8 
     {10, 9, "Node10"},}; //i=9 

    //Create as many nodes as there are rows of data. 
    DefaultMutableTreeNode[] node = new DefaultMutableTreeNode[table.length]; 
    for (int i = 0; i < table.length; i++) { 
     node[i] = new DefaultMutableTreeNode(table[i][2].toString()); 
    } 

    rootNode = node[0]; //Set the root node 

    //Cycle through the table above and assign nodes to nodes 
    for (int i = 0; i < table.length; i++) { 
     for (int j = 1; j < table.length; j++) { 
      if (table[i][0] == table[j][1]) { 
       System.out.println(table[i][2].toString() + " is parent of " + table[j][2].toString()); 
       node[i].add(node[j]); 
      } 
     } 
    } 
    //Creating the tree model. setting the root node. 
    treeModel = new DefaultTreeModel(rootNode); 
    //Setting the tree model to the JTree 
    JTree tree = new JTree(treeModel); 
    //adding the tree to the JPanel 
    add(tree); 
} 
2

는이 컬럼에 데이터를 정리 :

CREATE TABLE tree_node 
(NodeID int, 
ParentID int, 
Value varchar(250) 
...) //as many values per node as you want 

이 당신이 레코드를 탐색하고의 JTree를 채울 수 있습니다.

depth firstbreadth first 트리 탐색을 살펴보십시오.

+0

나는 테이블에 대한 계획을 신속하게 작성하여 계획 한 것보다 훨씬 효율적으로 데이터를 관리한다는 것을 알게되었습니다. 이에 따라 테이블과 데이터를 수정합니다. 깊은/호흡 첫 번째 트리 탐색 방법론을 보았습니다. 나는 알고리즘에 대한 올바른 방향으로 나를 둔다. 이제는 가장 잘 작동 할 트리 생성자에 대한 정보가 더 필요합니다. JTree (벡터), JTree (HashTable), JTree (TreeModel) 등 – ForgottenKahz

+1

이 [link] (http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html#create). DefaultMutableTreeNode를 사용하는 생성자와 함께 갈 것입니다. 깊이를 먼저하거나 호흡을 사용하여 트리를 가로 지르면 루트 DefaultMutableTreeNode에 노드를 추가하십시오. – eabraham

+0

저는 쿼리에서 나온 배열을 부모 노드로 바꿔서 그 노드에 더 많은 노드를 배치하는 등의 작업을 정말 고심하고 있습니다. 나는 TreeModel이 데이터를 구현하는 방법이지만 데이터베이스의 데이터를 반영하기 위해 TreeModel을 채우는 방법을 모르는지 확신한다. – ForgottenKahz