我将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应该为我处理这个问题。
感谢。
答案 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进行跟踪。