[英]Convert database table to JTree
任何人都可以提供有效的示例代碼來將以下具有父子關系的Oracle DB表轉換為Java代碼中的JTree嗎?
Table T (columns: Id, Parent_Id, Description).
我搜索了許多類似的問題,但是對於JTree的新手來說,所有問題似乎都含糊不清。 我不需要任何代碼即可連接到DB,而只需遍歷結果並填充JTree。
謝謝
當我開始使用JTree時,我實現了這個類,與您的問題非常相似。
檢查方法: getElementTreeFromPlainList
或多或少是用於從持久層獲取數據的方法, createTreeNodesForElement
用於創建樹節點的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;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.