Javafx将SetProperty绑定到从observable生成集合的回调

时间:2017-10-01 03:00:26

标签: java javafx observer-pattern

我有一个SetProperty<Point>和一个产生Stream<Point>的函数。

Stream<Point> generatePoints(Point p) {
    // ...
}
ObjectProperty<Point> selectedPointProperty() {
    // ...
}

SetProperty<Point> generatedPoints = new SimpleSetProperty();

我想将generatedPoints绑定到将generatedPoints应用于selectedPointProperty()的结果的结果。我尝试了以下代码,但它有类型错误。

generatedPoints.bind(Bindings.createObjectBinding(() -> generatePoints(selectedPointProperty().get()).collect(Collectors.toSet()),
 selectedPointProperty()));

1 个答案:

答案 0 :(得分:1)

SetProperty<T>不是Property<Set<T>>,而是Property<ObservableSet<T>>

因此属性所需的类型和

返回的类型
generatePoints(selectedPointProperty().get()).collect(Collectors.toSet())

不匹配。您需要从ObservableSet返回Callable,例如:

generatedPoints.bind(Bindings.createObjectBinding(() -> FXCollections.observableSet(generatePoints(selectedPointProperty().get()).toArray(Point[]::new)),
        selectedPointProperty()));