我在用 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);
}
}
暂无答案!
目前还没有任何答案,快来回答吧!