3

jTree内で呼び出されて定義されたjTree.treeModelHandlerが、treeNodesChangedイベントとtreeNodesInsertedイベントの両方に空白のメソッドを実装していることに気付きました。DefaultTreeModelはtreeNodesInsertedイベントを発生させ、jTreeはそれ自体を更新します。ただし、TreeModelから同じイベントを発生させても、何も起こりません。

明らかなメソッドが実装されていない場合、TreeがDefaultTreeModelからどのように更新できるかを理解できません。

ここで何が欠けていますか?

更新:回避策org.jdesktop.swingx.tree.TreeModelSupport。キットの素晴らしいビット!TreeModelインターフェイスオブジェクトにフィールドとして追加されました。次に、すべてのfireing&treeModelListenerメソッドをそれに委任しました。DefaultTreeModelよりもJTreeの方がうまく機能し、JXTreeでもさらにうまく機能します。単一の選択/挿入/削除のみを実装しましたが、これまでのすべてのテストでツリーは正しく動作しました。

4

1 に答える 1

3

DefaultTreeModelはそれ自体を起動します。リスナーはモデル上にあります(したがって、2つのJTreeで1つのTreeModelの変更を表示できます)。したがって、モデルはすべてのリスナーに通知するための正しい場所です。

基本的なインフラストラクチャがあるので、 AbstractTreeModelを拡張してみるべきだと思います。違います


TreeModelにはTreeModelListenersもあります。データの変更について。JTreeはそのようなリスナーです。JTreeには、ブランチが拡張されたかどうかなど、ビューの側面のリスナーがあります。

TreeModelでは、追加されたすべてのTreeModelListenerをウォークし、treeNodesInsertedのような適切なイベントを呼び出す必要があります。

于 2012-11-16T13:56:20.257 に答える