2010-02-12 14 views
7

Obecnie używam niestandardowego narzędzia TreeCellRenderer do obsługi zmian etykiet i ikon dla mojego JTree. Problem pojawia się, gdy potrzebuję zmienić tekst na kilku węzłach. TreeCellRenderer działa świetnie dzięki wyświetlaniu nowego tekstu. Jednak szerokość tekstu początkowego jest buforowana i nie jest aktualizowana. Próbowałem zhakować to przez nadpisanie getPreferredSize w TreeCellRenderer, ale to nie działa poprawnie, ponieważ mam ciągi html. Próbowałem nawet analizować znaczniki i uzyskiwać szerokość, ale nadal nie jest idealnie. Użyłem SwingUtilities i FontMetrics.Etykiety węzłów JTree często się zmieniają, ale szerokość jest buforowana.

Wygląda na to, że używanie podkładu drzewa DefaultTreeModel.nodeChanged (TreeNode) jest właściwym sposobem zmiany węzła. Jednak potrzebowałbym dodatkowej struktury danych, aby obsłużyć dostęp do węzłów, które należy zmienić. Osobiście chciałbym zmienić tylko te węzły, które wymagają zmiany. Ale wymagałoby to innej struktury danych, aby znaleźć wszystkie węzły, które wymagają aktualizacji. Jaki jest najlepszy sposób na buforowanie rozmiaru podkładu JLabel w tej sytuacji?

+0

Udało mi się naprawić to przez JTree.setLargeModel (true) docs mówią, że to wyłącza wiele pamięci podręcznej. Ale ostrzega także, że nie wszystkie interfejsy użytkownika go obsługują. Po prostu wypróbowałem to w kilku LnF-ach, a także w systemach Linux i Windows. Wydaje mi się w porządku. jakieś pomysły? – initialZero

Odpowiedz

2

Stwierdziłem, że najlepiej pasuje do mnie sposób, w jaki sugerowałeś wywoływanie nodeChanged.

Powiązane problemy