Ejemplos java y C/linux

Tutoriales

Enlaces

Licencia

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Para reconocer la autoría debes poner el enlace http://www.chuidiang.com

Cambiar los iconos de JTree

Ahora que ya sabemos cómo construir un JTree en java, vamos a avanzar un pequeño paso más. Vamos a cambiar los iconos de que salen en el JTree de una forma sencilla.

Coneptos básicos: el TreeCellRenderer y el DefaultTreeCellRenderer

Cuando un JTree necesita pintar un dato, le pregunta a otra clase cómo se dibuja ese dato. Esa otra clase, que si no hacemos nada para remediarlo está dentro del JTree y no la vemos, se llama DefaultTreeCellRenderer. La responsabilidad de esta clase es saber cómo se dibujan los datos en el árbol y entre otras cosas, saber también qué icono se debe poner a cada dato, en función de que sea un nodo abierto, un nodo cerrado o un nodo final (hoja).

Al JTree en realidad le vale cualquier clase que tenga un método al que él le pase el dato y la clase le devuelva cómo dibujarlo. Para asegurar que existe ese método, está la interface TreeCellRenderer. La clase DefaultTreeCellRenderer implementa esa interface y nosotros podríamos hacernos nuestras propias clases que implementen esa interface.

El JTree, en su método getCellRenderer() nos devuelve la clase que está usando para saber cómo dibujar los datos. Con su método setCellRenderer() podríamos pasarle una clase hecha a nuestra medida.

En resumen, JTree para saber cómo pintar los datos utilza una clase que implemente TreeCellRenderer. Si nadie le da una clase que implemente esta interface, JTree se construye un DefaultTreeCellRenderer.

Cambiar los iconos con DefaultTreeCellRenderer

Si sólo queremos cambiar los iconos, no es necesario construirnos una clase completa que implemente TreeCellRenderer. Podemos aprovechar la clase DefaultTreeCellRenderer que el JTree ya tiene dentro.

Lo primero que debemos hacer, es pedírsela al JTree

DefaultTreeCellRenderer render= (DefaultTreeCellRenderer)tree.getCellRenderer();

JTree nos devuelve un TreeCellRenderer, pero nosotros sabemos que en realidad es un DefaultTreeCellRenderer. Por eso hacemos el "cast", esa cosa entre paréntesis.

Una vez que lo tenemos, sólo hay que cambiar los iconos, usando los métodos que tiene la clase DefaultTreeCellRenderer:

El código, cogiendo unos iconos ficiticios que están en la unidad D:\, podría ser como este

ender.setLeafIcon(new ImageIcon("d:/futbol.gif"));
render.setOpenIcon(new ImageIcon("d:/hombre.gif"));
render.setClosedIcon(new ImageIcon("d:/viejo.gif"));

Y esto nos daría un árbol como el de la foto

cambiar iconos de jtree

en el que hemos puesto a un viejecito para el nodo "padre" que tiene hijos, pero no se ven. Un señor para el nodo "abuelo", que tiene hijos visibles. Y un niño jugando al futbol para el nodo "tio", que no tiene hijos.

Aquí puedes ver el código completo PruebaJTree2.java.

El siguiente paso es complicarnos más la vida y cambiar totalmente el aspecto del JTree.

Estadísticas y comentarios

Numero de visitas desde el 4 Feb 2007: