A.
ListView
由一个名为
items
列表您可以向该列表添加任意多个项目;但请注意,在实现
列表视图
其工作原理是使用(或多或少)固定的“单元格”集,并重用它们来显示新数据,例如,用户滚动视图。
也就是说,当然,如果您继续不受限制地向列表中添加更多项目,那么它将使用更多内存,并最终导致
OutOfMemoryError
. 您可以很容易地通过以下方式进行测试
ListView<String> listView = new ListView<>();
int count = 0 ;
while (true) {
listView.getItems().add("Item "+(++count));
}
当然,这会很快耗尽内存。
如果您要向列表中添加大量项目,并且希望应用程序运行一段时间(这对于任何桌面应用程序都是可能的-我在笔记本电脑上运行Chrome和Eclipse一次几个月),那么您应该限制列表中的项目数。这很容易做到,如果添加项目会超过某个最大值,只需从列表的前面删除项目即可。例如。
public class Controller {
private static final int MAX_LIST_VIEW_ITEMS = 5_000 ;
private ObservableList<String> listData = FXCollections.observableArrayList();
@FXML
private ListView<String> listView ;
public void initialize() {
listView.setItems(listData);
// ...
}
public void addToListView(List<String> itemsToAdd) {
listData.addAll(itemsToAdd);
int excess = itemsToAdd.size() - MAX_LIST_VIEW_ITEMS ;
if (excess > 0) {
listData.subList(0, excess).clear();
}
}
// ...
}