Con la clase JTree, se puede mostrar un �rbol de datos. JTree realmente no contiene datos, simplemente es un vista de ellos. Aqu� tienes una imagen de un �rbol.

Como muestra la figura anterior, JTree muestra los datos verticalmente. Cada fila contiene exactamente un �tem de datos (llamado un nodo). Cada �rbol tiene un nodo ra�z (llamado Root en la figura anterior, del que descienden todos los nodos. Los nodos que no pueden tener hijos se llaman nodos leaf (hoja). En la figura anterior, el aspecto-y-comportamiento marca los nodos hojas con un c�rculo.
Los nodos que no sean hojas pueden tener cualquier n�mero de hijos, o incluso no tenerlos. En la figura anterior, el aspecto-y-comportamiento marca los nodos que no son hojas con un carpeta. Normalmente el usuario puede expandir y contraer los nodos que no son hojas -- haciendo que sus hijos sena visibles o invisibles -- pulsando sobre �l. Por defecto, los nodos que no son honas empiezan contraidos.
Cuando se inicializa un �rbo, se crea un ejemplar de TreeNode para cada nodo del �rbol, incluyendo el ra�z. Cada nodo que no tenga hijos es una hoja. Para hacer que un nodo sin hijos no sea una hoja, se llama al m�todo setAllowsChildren(true) sobre �l.
�Crear un �rbol que Reaccione a las Selecciones
Aqu� hay una imagen de una aplicaci�n, en cuya mitad superior se muestra un �rbol en un scroll pane.

Intenta esto:
|
Abajo tenemos el c�digo TreeDemo.java que implementa el �rbol del ejemplo anterior.
public TreeDemo() { ... //Crea los nodos. DefaultMutableTreeNode top = new DefaultMutableTreeNode("The Java Series"); createNodes(top); //Crea un �rbol que permite una selecci�n a la vez. JTree tree = new JTree(top); tree.getSelectionModel().setSelectionMode (TreeSelectionModel.SINGLE_TREE_SELECTION); //Escucha cuando cambia la selecci�n. tree.addTreeSelectionListener(new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) (e.getPath().getLastPathComponent()); Object nodeInfo = node.getUserObject(); if (node.isLeaf()) { BookInfo book = (BookInfo)nodeInfo; displayURL(book.bookURL); } else { displayURL(helpURL); } } }); //Crea el scroll pane y le a�ade el �rbol. JScrollPane treeView = new JScrollPane(tree); ... //A�ade los scroll panes a un split pane. JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, treeView, htmlView); ... } private class BookInfo { public String bookName; public URL bookURL; public BookInfo(String book, String filename) { bookName = book; ./Set bookURL... } //Esto es lo que se mostrar� en el �rbol. public String toString() { return bookName; } } ... private void createNodes(DefaultMutableTreeNode top) { DefaultMutableTreeNode category = null; DefaultMutableTreeNode book = null; category = new DefaultMutableTreeNode("Books for Java Programmers"); top.add(category); //Tutorial book = new DefaultMutableTreeNode(new BookInfo ("The Java Tutorial: Object-Oriented Programming for the Internet", "tutorial.html")); category.add(book); ... category = new DefaultMutableTreeNode("Books for Java Implementers"); top.add(category); //VM book = new DefaultMutableTreeNode(new BookInfo ("The Java Virtual Machine Specification", "vm.html")); category.add(book); //Language Spec book = new DefaultMutableTreeNode(new BookInfo ("The Java Language Specification", "jls.html")); category.add(book); }
�Personalizar la visualizaci�n de un �rbol
Un �rbol usa un unico renderizador para dibujar todos sus nodos. Por defecto, este renderizador es un ejemplar de DefaultTreeCellRenderer.
Se puede personalizar f�cilmente la forma en que DefaultTreeCellRenderer dibuja los nodos. Por ejemplo, contiene m�todos que permiten seleccionar los iconos usados para los nodos del �rbol. Para personalizar el renderizador, s�lo debemos crear un ejemplar de DefaultTreeCellRenderer, llamar a alguno de sus m�todos setXxx, y luego hacer que el ejemplar sea el renderizador del �rbol. La siguiente figura muestra una aplicaci�n que ha cambiado su renderizador como que use un icono de hoja personalizado.

Aqu� est� el c�digo que seleccion el icono (el programa completo es TreeIconDemo.java).
DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer(); renderer.setLeafIcon(new ImageIcon("images/middle.gif")); tree.setCellRenderer(renderer);
�Cambiar Din�micamente un �rbol
La siguiente figura muestra una aplicaci�n que nos permite a�adir nodos al �rbol de forma din�mica. Tambi�n podemos editar el texto de cada nodo.

Puedes encontrar el c�digo en DynamicTreeDemo.java y DynamicTree.java.