2013-08-04 75 views
0

我很驚訝地發現這還沒有完成,或者至少我的研究是這麼說的。SWT標籤Drag'n'Drop

我有一個CanvasRowLayout和一堆Label s。

標題非常直截了當:我想使用DND重新排序我的標籤。

請不要告訴我我必須設計我自己的算法來計算邊界和大小以及類似的東西。

後來編輯:

我使用Zest考慮,但同樣,我找不到在哪裏圖形節點捕捉到海誓山盟任何例子。

+0

你有沒有考慮過使用類似[Zest](http://www.eclipse.org/gef/zest/)的東西? – Baz

+0

是的,我有。我希望這是我的最後手段,因爲我不想過度使用我的小部件。 – GGrec

回答

0

大約一年前,我做了類似的事情。

我解決這個問題的方法是使用數據模型來保存標籤信息。使用canvas.getChildren()並搜索每個對象之間的分隔符組合或放在頂端的標籤。拖放操作完成後,您將搜索您放置的項目並將參考移動到模型中的相應位置。然後重置每個標籤上的信息。只有這樣做的要求是通過標籤信息和對畫布的引用保持數據結構。

+0

我自己想過這個,但是我怎麼知道當我執行drop時我的鼠標下面有哪個控件?只需遍歷兒童並檢查其邊界? – GGrec

+0

類似以下內容: public void drop(DropTargetDropEvent dtde){src = dtde.getSource(); List children = canvas.getChildren(); 對(INT I = 0; I

+0

此外,如果標籤的內容是獨一無二的,您可以查看放入的標籤的內容並在模型中循環,以確定您放置的位置。你只需要將對象返回到一個控件,讓你可以訪問控件中包含的文本;所以,至少,種姓要複合或標籤。執行此操作的方法有點類似,因爲您執行String targetKey =((Composite/Label)dtde.getSource())。getText();然後,只需在模型中搜索索引即可插入傳輸源並根據需要進行更新。 –