2010-02-12 8 views
7

Actualmente, estoy usando un TreeCellRenderer personalizado para manejar cambios de etiqueta y de icono para mi JTree. El problema surge cuando necesito cambiar el texto en algunos nodos. El TreeCellRenderer funciona muy bien porque se muestra el nuevo texto. Sin embargo, el ancho del texto inicial se almacena en caché y no se actualiza. Intenté hackearlo anulando getPreferredSize en TreeCellRenderer, pero eso no funciona correctamente porque tengo cadenas html. Incluso he intentado analizar las etiquetas y obtener el ancho, pero todavía no es perfecto. He usado SwingUtilities y FontMetrics.JLas etiquetas de nodo cambian a menudo, pero el ancho está en caché

Parece que usar el respaldo del árbol DefaultTreeModel.nodeChanged (TreeNode) es la forma correcta de cambiar un nodo. Sin embargo, necesitaría tener una estructura de datos adicional para manejar el acceso a los nodos que necesitan ser cambiados. Personalmente, me gustaría cambiar solo los nodos que necesitan cambios. Pero, eso requeriría otra estructura de datos para encontrar todos los nodos que necesitan actualizarse algo. ¿Cuál es la mejor manera de evitar el almacenamiento en caché de tamaño del respaldo de JLabel en esta situación?

+0

Pude arreglar esto mediante JTree.setLargeModel (true) los documentos dicen que esto deshabilita una gran cantidad de almacenamiento en caché. Pero también advierte que no todas las UI lo admiten. Acabo de probarlo en varios LnF, así como en Linux y Windows. Me parece bien. ¿Alguna idea? – initialZero

Respuesta

2

He encontrado que usar la forma en que sugirió llamar a nodeChanged me ha funcionado mejor.

Cuestiones relacionadas