首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bindings.createObjectBinding和空依赖项

Bindings.createObjectBinding和空依赖项
EN

Stack Overflow用户
提问于 2020-12-09 15:57:27
回答 1查看 307关注 0票数 1

我有node属性,即ObjectProperty<VBox>,我希望有依赖于node属性的nodeSize属性。

它看起来是这样的:

代码语言:javascript
复制
public final class PropertyProblem {

    public PropertyProblem() {
        nodeSize.bind(initNodeSizeBinding(node));
    }

    private ObjectBinding<Dimension2D> initNodeSizeBinding(ObjectProperty<VBox> nodeProperty) {
        return Bindings.createObjectBinding(() -> {
            if (nodeProperty.get() == null) {
                return null;
            }

            VBox node = nodeProperty.get();
            ReadOnlyDoubleProperty widthProperty = node.widthProperty(),
                    heightProperty = node.heightProperty();
            return new Dimension2D(widthProperty.get(), heightProperty.get());
        }, nodeProperty);
    }

    // node property
    private final ObjectProperty<VBox> node = new SimpleObjectProperty<>(this, "node", null);

    public ObjectProperty<VBox> nodeProperty() {
        return node;
    }

    public void setNode(VBox val) {
        node.set(val);
    }

    public VBox getNode() {
        return node.get();
    }

    // nodeSize property
    private final ReadOnlyObjectWrapper<Dimension2D> nodeSize = new ReadOnlyObjectWrapper<>
            (this, "nodeSize");

    public ReadOnlyObjectProperty<Dimension2D> nodeSizeProperty() {
        return nodeSize;
    }

    public Dimension2D getNodeSize() {
        return nodeSize.get();
    }

}

让我们集中讨论initNodeSizeBinding()方法。问题是我不能为绑定提供依赖项(节点的宽度和高度),因为很明显,node属性可以是null。在每次node属性更改其值时,不需要创建绑定,还有其他方法来处理这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-09 17:09:23

我认为您需要Bindings.when,它是与第三级操作符(即条件? trueExpr : falseExpr​)的动态绑定等价的:

代码语言:javascript
复制
return Bindings
    .when(nodeProperty.isNotNull())
    .then(Bindings.createObjectBinding(
        () -> new Dimension2D(nodeProperty.get().getWidth(),
                              nodeProperty.get().getHeight()),
        Bindings.selectDouble(nodeProperty, "width"),
        Bindings.selectDouble(nodeProperty, "height"))
    .otherwise((Dimension2D) null);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65220286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档