bindings.select()依赖项不会更新

ykejflvf  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(201)

我在用 Bindings.select() 为了访问可能为空的属性(请看 ClassOne -> initClassTwoSizeBinding() ). 即使我把它作为依赖项,它似乎不起作用,它只是不关心属性的变化。我准备了一个工作示例,看看下面。我做的一切都对吗?
代码:
主.java

public class Main {

    public static void main(String[] args) {
        ClassOne classOne = new ClassOne();
        ClassTwo classTwo = new ClassTwo();

        classOne.setClassTwo(classTwo);

        classTwo.setWidth(100.0);
        classTwo.setHeight(100.0);
    }

}

类一.java

public final class ClassOne {

    public ClassOne() {
        classTwoSize.bind(initClassTwoSizeBinding(classTwo));
    }

    private ObjectBinding<Dimension2D> initClassTwoSizeBinding(ObjectProperty<ClassTwo> classTwoProperty) {
        return Bindings.createObjectBinding(
                () -> {
                    System.out.println("THIS CODE IS EXECUTED");
                    ClassTwo classTwo = classTwoProperty.get();
                    return classTwo == null ? new Dimension2D(150, 150)
                            : new Dimension2D(classTwo.getWidth(), classTwo.getHeight());
                },
                classTwoProperty,
                Bindings.select(classTwoProperty, "width"),
                Bindings.select(classTwoProperty, "height")
        );
    }

    //classTwo

    private final ObjectProperty<ClassTwo> classTwo = new SimpleObjectProperty<>
            (ClassOne.this, "classTwo", null);

    public ObjectProperty<ClassTwo> classTwoProperty() {
        return classTwo;
    }

    public void setClassTwo(ClassTwo value) {
        classTwo.set(value);
    }

    public ClassTwo getClassTwo() {
        return classTwo.get();
    }

    //classTwoSize

    private final ReadOnlyObjectWrapper<Dimension2D> classTwoSize = new ReadOnlyObjectWrapper<>
            (ClassOne.this, "classTwoSize");

    public ReadOnlyObjectProperty<Dimension2D> classTwoSizeProperty() {
        return classTwoSize.getReadOnlyProperty();
    }

    public Dimension2D getClassTwoSize() {
        return classTwoSize.get();
    }

}

类2.java

public final class ClassTwo {

    //width

    private final ReadOnlyDoubleWrapper width = new ReadOnlyDoubleWrapper
            (ClassTwo.this, "width");

    public ReadOnlyDoubleProperty widthProperty() {
        return width.getReadOnlyProperty();
    }

    public double getWidth() {
        return width.get();
    }

    public void setWidth(double val) {
        //ONLY FOR TESTING PURPOSES!!!
        width.set(val);
    }

    //height

    private final ReadOnlyDoubleWrapper height = new ReadOnlyDoubleWrapper
            (ClassTwo.this, "height");

    public ReadOnlyDoubleProperty heightProperty() {
        return height.getReadOnlyProperty();
    }

    public double getHeight() {
        return height.get();
    }

    public void setHeight(double val) {
        //ONLY FOR TESTING PURPOSES!!!
        height.set(val);
    }

}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题