当列排序处于活动状态时,JavaFX TableView在ObservableList中插入

时间:2012-11-16 02:03:26

标签: javafx

我将JavaFX TableView定义为:

TableView<MyMessage> messages;

ObservableList:

支持它
private ObservableList<MyMessage> messagesList;

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

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

MyMessage 对象有10个字段,所有字段都是String。有一个后台操作将 MyMessage 对象插入到ObservableList中。

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

一切都像宣传的那样有效。当对象插入ObservableList时,TableView的表行会更新。

似乎没有按预期工作的是,如果我单击列标题对表进行排序,后台线程插入的后续项将附加到表的末尾。不到正确排序的行位置。如果我单击以使用该列,则可以正确使用该表。

我是否需要在每次向ObservableList添加内容时强制重新排序表?或者TableView应该为我处理这个问题。

感谢。

2 个答案:

答案 0 :(得分:3)

Java FX 8现在在tableView上有一个.sort()方法,可以调用它来重新触发排序。某些操作会自动触发重新排序,但在可观察集合中添加/删除条目的外部事件则不会。

答案 1 :(得分: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进行跟踪。