4

我有一个 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 个字符串类型的字段。有一个将MyMessage对象插入 ObservableList 的后台操作。

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

一切都像宣传的那样工作。TableView 的表行随着对象插入 ObservableList 而更新。

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

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

谢谢。

4

2 回答 2

3

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

于 2014-12-17T20:42:15.883 回答
2

TableView 是否应该为我解决这个问题

不。

有一个要求TableView 在基础列表更改时保持排序顺序,但它被关闭为“不是问题”。您可以查看有关该问题的评论以获取更多详细信息。简而言之,保持列表排序是底层 ObservableList 或维护列表的应用程序的责任。

每次向 ObservableList 添加内容时,是否需要强制重新排序表格?

本质上,是的。

JavaFX 应该附带一个 SortedObservableList 实现,它与 TableView 有效地合作,使应用程序的所有排序处理几乎自动化。但是,对于 JavaFX 2.2,该功能并没有被包含在内。目前,此功能计划作为 JDK/JRE8 的一部分交付,并且可以通过这个总括问题进行跟踪,以改进 TableView 中的排序支持

于 2012-11-16T05:29:58.527 回答