2012-08-31 25 views
0

我有一個需要排序的小部件列表。我想爲這些小部件列表創建一個容器,以在每次添加新小部件時重新對它們進行排序。我該怎麼做?如何在GWT中對小部件進行排序?

我可以看到以下幾種方式:

  1. 一個簡單的方法是將它們放到ArrayList和排序通過比較,但增加了新的元素後,我們必須從包裝箱中取出所有的列表並重新添加它們,以新的順序。
  2. 使用一些排序容器。我爲此找到了CellTable。但實際上我並不需要它豐富的功能 - 我只有一列,不需要對用戶事件進行排序,只有當新元素添加或刪除時, - 我還有什麼其他的東西可以在我的用例中使用?

GWT 2.4

PS 其實,我在尋找的東西,可以表示像「由小工具集支持小部件容器」,即我改變收集 - 容器改變它的內容,我怎麼能實現這個,或者我可以在哪裏找到它?

PPS 小部件可以不同,這就是爲什麼我不認爲我可以輕鬆使用CellTable。

回答

1

添加新窗口小部件後,沒有直接的方法重新排列DOM中的元素。 附件部件時,您不能移動它們(在文檔結構中更改它們的位置),而無需分離和重新附加。 那麼,絕對定位你可以改變左上角的座標來移動物品,如果這是你需要的。

我有一個類似的問題來解決,當我不得不排序TreeItem元素(沒有內置的排序方法可用)。作爲一種解決方法,我將所有孩子讀入列表中,並同時從父窗口小部件中移除它們,然後使用Comparator對這些項目進行排序,並將它們從排序列表中添加回父項。所有東西都在一個sort()方法中,它封裝了所有必需的功能,並簡化了對此代碼的理解。

「的小工具集支持小部件容器」

我想了解一個這樣也可以做整理和重新連接上飛。但是,我仍然會支持同樣的分離。我會建議你自己寫一個,這將符合你的特殊需求。無論您需要樹還是FlowPanel或其他任何東西 - 您都可以根據上下文擴展並添加sort()邏輯。並相應地重寫add()方法。所以,你的第一個選擇看起來像是一個可能的解決方案。

+0

謝謝,alexp。最後,我最終編寫了一個方法,在排序之前找到元素的正確位置,並在該位置準確插入新的小部件。 FlowPanel爲此插入了(widget,index)方法。插入後排序所有小部件的方法也是一個很好的解決方案。順便說一句,在這裏我問什麼是更有效的algorythms理論:http://stackoverflow.com/questions/12219835/what-is-faster-sort-n-elements-or-insert-n-elements-one-接一個,在糾正-PLAC – KutaBeach

相關問題