2012-06-16 124 views
0

任何人都可以提供一個工作示例代碼,以便將具有父子關係的以下Oracle DB錶轉換爲Java代碼中的JTree?將數據庫錶轉換爲JTree

Table T (columns: Id, Parent_Id, Description).

...我已經尋找很多類似的問題,但一切似乎模糊和不完整的人誰是新的JTree的。我不需要任何代碼連接到數據庫,但只需要查看結果並填充JTree。

感謝

+3

根據這篇文章很難確切地知道你在哪裏感到困惑,而且你的問題涵蓋了很多理由。爲什麼不先嚐試一下,然後如果你的嘗試失敗了,給我們看你的代碼。 –

+0

感謝您的回覆。我正在嘗試與你所要求的相同。一旦我有一些進展,會讓我們知道。 –

+0

祝你好運!不是我的倒票。 –

回答

1

當我開始與我的JTree實現這個類,這似乎與你的問題非常相似。

檢查方法:getElementTreeFromPlainList或多或少的方法,你會用來從持久層獲取數據和方法createTreeNodesForElement創建樹的節點。

import java.util.ArrayList; 
import java.util.Collection; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

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

public class MyJFrame extends JFrame { 

    private static final long serialVersionUID = 1L; 

    private static List<String[]> data = new ArrayList<String[]>(); 

    static { 
     data.add(new String[] { "Id1", "Start 1", null }); 
     data.add(new String[] { "Id2", "Node 1.1", "Id3" }); 
     data.add(new String[] { "Id3", "Node 1", "Id1" }); 
     data.add(new String[] { "Id4", "Node 1.2", "Id3" }); 
     data.add(new String[] { "Id5", "Node 2", "Id1" }); 
     data.add(new String[] { "Id6", "Start 2", null }); 
    } 

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

    MyJFrame() { 
     JTree tree = new JTree(); 

     DefaultMutableTreeNode root = new DefaultMutableTreeNode("Found Nodes"); 

     createTreeNodesForElement(root, getElementTreeFromPlainList()); 

     tree.setModel(new DefaultTreeModel(root)); 

     add(tree); 

     setVisible(true); 
     setBounds(0, 0, 200, 200); 
    } 

    Collection<Element> getElementTreeFromPlainList() { 
     // builds a map of elements object returned from store 
     Map<String, Element> values = new HashMap<String, Element>(); 
     for (String[] s : data) { 
      values.put(s[0], new Element(s[2], s[1])); 
     } 

     // creates a result list 
     Collection<Element> result = new ArrayList<MyJFrame.Element>(); 

     // for each element in the result list that has a parent, put it into it 
     // otherwise it is added to the result list 
     for (Element e : values.values()) { 
      if (e.parent != null) { 
       values.get(e.parent).getChildren().add(e); 
      } else { 
       result.add(e); 
      } 
     } 

     return result; 
    } 

    void createTreeNodesForElement(final DefaultMutableTreeNode dmtn, final Collection<Element> elements) { 
     // for each element a tree node is created 
     for (Element child : elements) { 
      DefaultMutableTreeNode created = new DefaultMutableTreeNode(child.getName()); 
      dmtn.add(created); 
      createTreeNodesForElement(created, child.getChildren()); 
     } 
    } 

    public static class Element { 
     private final String parent; 
     private final String name; 
     private final Collection<Element> children = new ArrayList<MyJFrame.Element>(); 

     public Element(final String parent, final String name) { 
      super(); 
      this.parent = parent; 
      this.name = name; 
     } 

     public String getName() { 
      return name; 
     } 

     public Collection<Element> getChildren() { 
      return children; 
     } 

    } 

} 
+0

這正是我正在尋找的。非常感謝Spaeth。在這裏,我瞭解到,即使人們不知道問題的答案,他們仍然會回覆(有些評論不好),但是你救了我的一天。 –