2011-07-01 3 views
3

私は自分のTreeModelを表示するJTreeを持っています。 TreeModelはデータベースから "オンデマンドで"読み込まれます(部分的にEDTで行われているので多少醜いですが、ここでは問題はありません)。ユーザがツリーに適用されるフィルタを選択できるようにするメニューがあります。Swing JTree:treeStructureUpdatedイベントをモデルリスナーに正しく送信することができないようです

フィルタを変更すると、ノードがTreeModelによって隠されるか、新しいノードが公開される可能性があります。これは私の問題がある場所です - どのノードが実際に変更されたのかわからないので、モデルから適切なtreeStructureChangedイベントを生成する合理的な方法はありません。モデル全体が(潜在的に)異なっていることをリスナーに伝える簡単な方法はないようです。

モデル全体が変更されたことをすべてのTreeModelListenerに伝える簡単な方法はありますか? (もちろん、選択/展開の状態を可能な限り保持したい)

+1

私はそれについて何か分かりません1)http://java.sun.com/products/jfc/tsc/articles/jtree/ 2)http://www.java2s.com/Code/Java/Swing -JFC/implementsTreeModeltocreatetreemodel.htm 3)http://download.oracle.com/javase/6/docs/api/javax/swing/tree/DefaultTreeModel.html – mKorbel

答えて

1

ツリー構造全体が変更されたことを伝えたいので、ツリーのルートにTreeModelEventを各リスナーに送信します。 GenealogyModelの方法fireTreeStructureChanged()は、How to Use Trees: Creating a Data Modelに記載されている例です。

+0

ルート・ノードのイベントを送信するだけで、ツリーがきれいにリフレッシュされますが、また、ツリー全体を折りたたんで選択を削除します。私はそれを回避することができますが、それは悪い味を残します。 – Durandal

関連する問題