2012-11-16 42 views
4

我已經一個JavaFX TableView中定義爲:的JavaFX的TableView插入在ObservableList當列排序是活性

private ObservableList<MyMessage> messagesList; 

// Allocate the message list 
messagesList = FXCollections.observableArrayList(); 

// Set the list into place 
messages.setItems(messagesList); 

MyMessage對象有10個字段:

TableView<MyMessage> messages; 

它是由一個ObservableList支持所有類型的String。有一個後臺操作,將MyMessage對象插入到ObservableList中。

messages.add(new MyMessage(String ... colData)); 

一切正如廣告所說。當對象被插入到ObservableList中時,TableView的表格行被更新。

什麼似乎沒有按預期工作,是如果我點擊一個列標題排序表後,由後臺線程插入後續項目附加到表的末尾。不適合正確排序的行位置。如果我點擊這個欄目,表格就會正確地呈現出來。

我是否需要在每次向ObservableList添加內容時強制重新排序表?或者應該由TableView爲我照顧。

謝謝。

回答

2

應的TableView照顧,對我

有一個要求,即TableView maintain sort order as the underlying list changes但它被封閉,「不成問題」。您可以查看有關該問題的評論以獲取更多詳細信息。簡而言之,保持列表排序是基礎ObservableList或維護列表的應用程序的責任。

我是否需要在每次向ObservableList添加內容時強制重新排序表?

從本質上講,是的。

JavaFX應該附帶一個SortedObservableList實現,該實現與TableView有效地協作,使應用程序的所有排序處理都自動完成。但是,對於JavaFX 2.2來說,這個功能並沒有被包含在內。目前,此功能計劃作爲JDK/JRE8的一部分交付,並可通過此umbrella issue for improved sorting support in TableView進行跟蹤。

+0

要強制重新排序,我們是否需要清除TableView.sortOrder()並重置它? –

3

Java FX 8現在在tableView上有一個.sort()方法,可以調用它來重新觸發排序。有些操作會自動觸發重新排序,但可觀察集合中的外部事件添加/刪除條目不會。