【发布时间】:2022-11-01 16:46:08
【问题描述】:
使用 JavaFX 实现某种图形可视化时出现了我的问题。有 2 个类称为 Vertex 和 Edge,每条边连接 2 个(可能相同)顶点。每个具有自环的顶点(具有相同开始和结束顶点的边)存储一个DoubleProperty 用于其自环的首选角度。该角度是根据该顶点及其所有邻居的位置计算得出的。但是,由于图形是动态构建的,顶点的邻居可能会发生变化,从而产生动态的依赖关系列表,因此我必须修改角度绑定到的DoubleBinding 的依赖关系。
但是,Bindings.createDoubleBinding 创建的DoubleBinding 中的getDependencies 方法只返回一个不可变的副本:
@Override
public ObservableList<?> getDependencies() {
return ((dependencies == null) || (dependencies.length == 0))?
FXCollections.emptyObservableList()
: (dependencies.length == 1)?
FXCollections.singletonObservableList(dependencies[0])
: new ImmutableObservableList<Observable>(dependencies);
}
尽管DoubleBinding 类有一个似乎满足我需要的bind 方法,但它受到了保护:
protected final void bind(Observable... dependencies) {
if ((dependencies != null) && (dependencies.length > 0)) {
if (observer == null) {
observer = new BindingHelperObserver(this);
}
for (final Observable dep : dependencies) {
dep.addListener(observer);
}
}
}
那么有什么方法可以让我随时修改依赖项而不定义我自己的DoubleBinding,或者我可以在不接触依赖项的情况下解决我的问题吗?
【问题讨论】:
标签: java javafx properties