ITflow.de

Baumstruktur mit Java/Swing aus DB Tabelle

by admin on Nov.30, 2009, under Allgemein

Die Datenbanktabelle sieht so aus:

dbTable

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.


Leave a Reply

You must be logged in to post a comment.

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Visit our friends!

A few highly recommended friends...