Baumstruktur mit Java/Swing aus DB Tabelle
by admin on Nov.30, 2009, under Allgemein
Die Datenbanktabelle sieht so aus:
Und der Java-Code welcher den Baum in einem JPanel darstellt, sieht so aus:
import java.awt.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.tree.*;
import de.logger.Logger;
/**
* This Class generates a JTree structure out of a Database Table.
*/
public class Tree extends JPanel{
private JTree tree = null;
public Tree() {
setLayout(new BorderLayout());
DefaultMutableTreeNode root = new DefaultMutableTreeNode("RootNode");
this.add(root,1);
this.tree = new JTree(root);
this.add(new JScrollPane(tree));
}
/**
* Select the nodes which has the given ID as parent.
* @param parentId
* @return ArrayList with an ArrayLists
* of nodes (DefaultMutableTreeNode) and
* an ArrayList of ID´s (Integer)
*/
private ArrayList<ArrayList> getChields(int parentId){
ResultSet rs = DBQuery.select("select name,id from tree where parent = "+parentId);
ArrayList<DefaultMutableTreeNode> nodes = new ArrayList<DefaultMutableTreeNode>();
ArrayList<Integer> ids = new ArrayList<Integer>();
try {
while(rs.next()){
String nodeName = rs.getString("name");
DefaultMutableTreeNode node = new DefaultMutableTreeNode(nodeName);
Integer id = Integer.valueOf(rs.getString("id")).intValue();
nodes.add(node);
ids.add(id);
}
} catch (NumberFormatException e) {
Logger.log(this, e.getMessage());
} catch (SQLException e) {
Logger.log(this, e.getMessage());
}
ArrayList<ArrayList> array = new ArrayList<ArrayList>();
array.add(nodes);
array.add(ids);
return array;
}
/**
* Searches recursiv the chield nodes of the given ID and
* add them to the given node
* @param node The node where the found chield nodes should be added
* @param id The id of the root node.
*/
private void add(DefaultMutableTreeNode node, int id){
ArrayList<ArrayList> list = this.getChields(id);
ArrayList<DefaultMutableTreeNode> nodes = list.get(0);
for (DefaultMutableTreeNode defaultMutableTreeNode : nodes) {
node.add(defaultMutableTreeNode);
}
ArrayList<Integer> ids = list.get(1);
int current = 0;
for (Integer integer : ids) {
this.add(nodes.get(current), integer);
current ++;
}
}
}
Sollte nur ein kurzes Beispiel sein, für die, die vielleicht eine Anregung suchen, wie man eine Baumstruktur in Java aus einer DB Tabelle machen könnte.
