Ebo*_*ike 2 java javafx observable
我有多个 JavaFX 窗格和画布,它们引用具有所需数据的复杂对象,我希望它们在对象更改时重绘。
这将要求对象是 Observable,但我使用哪个类?JavaFX 似乎主要有 ObservableValue 子类,它们包装一个值并允许将其换出。我不想换出复杂的对象,只是在发生变化时通知听众。我可以通过实现来做到这一点addListener,但我确信已经有一个子类为我做到了。
class ComplexObject /* extends SomeObservableClass */ {
public int getValue1 { complex calculations... };
public int getValue2 { ... };
public void setNewValue1(int newValue) { ... }
}
class ComplexRenderer extends Canvas implements InvalidationListener {
private ComplexObject complexObject;
public void setComplexObject(ComplexObject complexObject) {
this.complexObject = complexObject;
complexObject.addListener(this);
}
public void draw() { ... }
}
Run Code Online (Sandbox Code Playgroud)
ComplexObject 应该扩展哪个类?是否有一些东西可以维护监听器列表并有类似 fireValueChangedEvent() 这样的东西,所以我可以让它通知所有监听器?
我在 JavaFX 中看到的一切似乎都是针对属性的,这在这里似乎不是正确的选择。
不太确定你所说的交换是什么意思,也不确定我是否理解你的意思。
class ComplexObject {
private IntegerProperty value1 = new SimpleIntegerProperty();
private IntegerProperty value2 = new SimpleIntegerProperty();
private BooleanProperty internalChanged = new SimpleBooleanProperty(false);
public ComplexObject() {
this.internalChanged.bind(Bindings.createBooleanBinding(() ->
this.internalChanged.set(!this.internalChanged.get()), this.value1, this.value2));
}
public IntegerProperty value1Property() { return this.value1; }
public int getValue1() { return this.value1.get(); }
public void setValue1(int value) { return this.value1.set(value); }
public IntegerProperty value2Property() { return this.value2; }
public int getValue2() { return this.value2.get(); }
public void setValue2(int value) { return this.value2.set(value); }
public void setNewValue1(int newValue) { /* What value is this??? */ }
public BooleanProperty internalChangedProperty() { return this.internalChanged; }
}
class ComplexRenderer extends Canvas implements InvalidationListener {
private ComplexObject complexObject;
public void setComplexObject(ComplexObject complexObject) {
this.complexObject = complexObject;
complexObject.internalChangedProperty().addListener(this);
}
@Override public void invalidated(Observable observable) {
// Something inside complex object changed
}
public void draw() { ... }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1832 次 |
| 最近记录: |