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.