2010-02-12 23 views
7

Şu anda JTree'im için etiket ve simge değişikliklerini işlemek için özel bir TreeCellRenderer kullanıyorum. Sorun, birkaç düğümdeki metni değiştirmem gerektiğinde ortaya çıkıyor. TreeCellRenderer, yeni metnin görüntülendiğinden mükemmel çalışır. Ancak, ilk metinden gelen genişlik önbelleğe alınır ve güncellenmez. TreeCellRenderer'da getPreferredSize'yi geçersiz kılarak onu hacklemeyi denedim, ancak html dizelerim olduğundan düzgün çalışmıyor. Etiketleri ayırmayı ve genişliği almayı bile denedim, ama yine de mükemmel değil. SwingUtilities ve FontMetrics kullanmıştım.JTree düğüm etiketleri sık sık değişir ancak genişlik önbelleğe alınır

Ağacın yedeğini kullanmak DefaultTreeModel.nodeChanged (TreeNode) bir düğümü değiştirmek için uygun yoldur. Bununla birlikte, değiştirilmesi gereken düğümlere erişmek için ek bir veri yapısına sahip olmalıyım. Şahsen, sadece değişmesi gereken düğümleri değiştirmek istiyorum. Ancak, bu tür bir güncelleme yapılması gereken tüm düğümleri bulmak için başka bir veri yapısı gerektirir. Bu durumda destek JLabel'in önbelleğe alınmasının en iyi yolu nedir?

+0

JTree.setLargeModel (true) tarafından düzeltilebildiğini belirten dokümanlar, bu durumun birçok önbelleğe almayı devre dışı bıraktığını söylüyor. Ama aynı zamanda UI'lerin desteklemediği konusunda da uyarıyor. Sadece birkaç LnF'de olduğu gibi Linux ve Windows'da da denedim. Bana iyi görünüyor. Düşüncesi olan var mı? – initialZero

cevap

2

nodeChanged çağrısı önerdiğin yöntemi kullanmanın benim için en iyi şekilde çalıştığını buldum.

İlgili konular