2012-11-16 42 views
2

我已經注意到,JTree.TreeModelHandler在所謂的內JTree的定義&,實現兩個空白方法treeNodesChanged & treeNodesInserted事件。 DefaultTreeModel觸發一個treeNodesInserted事件& jTree自行更新。但是,當我從TreeModel觸發相同的事件時,什麼都不會發生。爲什麼JTree處理來自DefaultTreeModel但不是TreeModel的事件?

我無法弄清楚當樹沒有實現任何明顯的方法時,樹可以如何從DefaultTreeModel更新。

我在這裏錯過了什麼?

更新:解決方法org.jdesktop.swingx.tree.TreeModelSupport。套件很棒!作爲字段添加到我的TreeModel接口對象中。然後委派所有射擊& treeModelListener方法給它。使用JTree的效果比使用JXTree更好的DefaultTreeModel &更好。我只實現了單獨的選擇/插入/刪除,但樹迄今在所有測試中表現正確。

+0

爲更好地幫助更快張貼[SSCCE(http://sscce.org/)證明我的問題,總之,可運行,編譯,可以基於'Oracle'教程的'XxxTreeListener',我覺得這個問題ISN這個形式可以用 – mKorbel

+0

+1來解決TreeModelSupport(偏見我:-)順便說一句:樹對待所有的模型並且正確地更新自己,只要它們正確地觸發事件(這不是微不足道的)。 「主」聽是在UI委託中處理的,JTree本身的處理器只是一個小調整 – kleopatra

回答

2

DefaultTreeModel會自行啓動。聽衆在模型上(所以你可以有兩個JTree查看一個TreeModel的變化)。所以這個模型是通知所有聽衆的正確地點。

我相信我們應該嘗試擴展AbstractTreeModel作爲一個有一些基本的基礎設施。 NOT TRUE


TreeModel也有TreeModelListeners。對數據進行更改。 JTree是這樣一個傾聽者。 JTree擁有視圖方面的監聽器,分支是否擴展等。

在你的TreeModel一個人走路都加入TreeModelListener S和調用諸如treeNodesInserted此時,相應的事件。

+2

Flameware ==我看不到基於標準Oracle Apis的AbstractTreeModel,從來沒有,我認爲這個問題不是以這種形式支付 – mKorbel

+0

@Joop - 當然,聽衆必須在樹上,如果你有2棵樹,那麼你將有2組聽衆,每棵樹一個。 –

+0

@mKorbel對,我混淆了事物;沒有AbstractTreeModel。 –

相關問題