有人可以解释为什么TreeItem的javadoc使用FXCollections.observableArrayList创建本地子变量,而不是ArrayList,例如。
private ObservableList<TreeItem<File>> buildChildren(TreeItem<File> TreeItem) {
File f = TreeItem.getValue();
if (f != null && f.isDirectory()) {
File[] files = f.listFiles();
if (files != null) {
ObservableList<TreeItem<File>> children = FXCollections.observableArrayList();
for (File childFile : files) {
children.add(createNode(childFile));
}
return children;
}
}
return FXCollections.emptyObservableList();
}
然后按如下方式添加返回的集合
@Override public ObservableList<TreeItem<File>> getChildren() {
if (isFirstTimeChildren) {
isFirstTimeChildren = false;
// First getChildren() call, so we actually go off and
// determine the children of the File contained in this TreeItem.
super.getChildren().setAll(buildChildren(this));
}
return super.getChildren();
}
由于super.getChildren()已经是一个ObservableList,因此将ObservableList添加到ObservableList有什么好处。在我的代码中,我使用ArrayList创建了子项,并在根节点上添加了valueChangedListener,并在为子项设置值时收到了事件。
另一方面,TreeView的javadoc分别添加了TreeItem元素,而不是将它们包装在ObservableList中。
这里有什么特别的东西吗?