2013-12-15 58 views
0

我有一個JPanel,它的作用類似於具有元素的畫布,並且面板旁邊的JTree中列出的元素。現在,我在JPanel上實現了我的元素選擇,它包含實現接口的元素,並且實質上是樹的節點。將JTree選擇綁定到外部集合?

是否可以直接將樹選擇與該集合綁定,以便我可以在不寫入太多代碼的情況下同步這兩個選擇?

我已經看過TreeSelectionModel接口,但這似乎有點矯枉過正。我希望得到的是一個內置的類,它在構造函數中收集一個集合,或者像這樣的一些小事。

我會發佈一個sscce,但我的項目在這個時候是非常不乾淨的,會有很多代碼並不真正相關。

我的JTree使用了一個DefaultTreeModel,它有我的根節點(Workspace)作爲它的構造函數的唯一參數。現在,我的Workspace收集了代表我圖的模型的TreeNode。但是,圖本身就是一個基於模型構成畫家的視圖。

該圖的模型還有一個名爲SelectedElements的集合,它根據選擇(通過點擊或套索完成)添加和刪除元素。

+0

'「... TreeSelectionModel接口,但這似乎有點矯枉過正。」 - - 你爲什麼這麼說? –

+0

考慮創建併發布[sscce](http://sscce.org)以更好地告知我們您的問題。 –

+0

那麼,從頭開始實現接口需要我實現一堆方法,如果我正確地理解它(儘管它很可能我沒有),默認選擇模型適用於節點的完整路徑,而我只有我的處置元素(樹的葉子)。 最後,我必須這樣做,我認爲,但我只是想知道是否有一個更簡單的方法(或者,如果我甚至理解'TreeSelectionModel'的內在範圍 – user2352164

回答

1

我認爲,雖然只有葉子顯示在您的JPanel中,但您仍然需要將此顯示基於完整樹。換句話說,您應該使用JTree的模型作爲您的JPanel顯示的基礎。考慮它只是模型的另一個視圖。然後,您可以輕鬆地共享選擇監聽器,甚至不需要創建任何新的TreeSelectionListener,而只需使用JTree所具有的同一個。

+0

我會發佈一個sscce,但是我在這個時候的項目非常不乾淨,並且會有大量的代碼並不真正相關 我的'JTree'使用了一個'De faultTreeModel「,它具有我的根節點('Workspace')作爲其構造函數的唯一參數。現在,我的'Workspace'有一個'TreeNode'集合,它代表了我的圖的模型。但是,圖本身就是一個基於模型構成畫家的視圖。 該圖的模型還有一個名爲'SelectedElements'的集合,該集合根據選擇添加和刪除元素(通過點擊或套索完成)。 – user2352164

+0

@ user2352164:測試我的想法的唯一方法是創建一個sscce並對其進行測試,但我沒有時間。如果您需要我的進一步幫助,您的SSCCE將不勝感激。 –