沒有這是不可能的綁定。綁定的值由computeValue
方法計算(至少在不存儲其他信息的地方)。此方法不會獲得任何參數。它根本沒有關於哪個依賴項最後失效的任何信息。
因此它不可能區分修改
buttonA pressed
buttonB pressed
和
buttonB pressed
buttonA pressed
的以下序列然而結果是lightIsTurnedOn
爲false
/true
。
然而,當然這樣的事情是可能的,儘管只是簡單地將偵聽器添加到屬性中來設置值是可取的。
@Override
public void start(Stage primaryStage) {
ToggleButton buttonA = new ToggleButton("A");
ToggleButton buttonB = new ToggleButton("B");
Circle light = new Circle(30, Color.YELLOW);
light.visibleProperty().bind(new BooleanBinding() {
boolean lastA = false;
boolean lastB = false;
{
bind(buttonA.selectedProperty(), buttonB.selectedProperty());
}
boolean value = false;
@Override
protected boolean computeValue() {
boolean a = buttonA.isSelected();
boolean b = buttonB.isSelected();
if (lastA != a && a) {
value = true;
}
if (lastB != b && b) {
value = false;
}
lastA = a;
lastB = b;
return value;
}
});
HBox root = new HBox(buttonA, buttonB, light);
root.setAlignment(Pos.CENTER);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
然後在下一次按?什麼應該從真到假?你不需要兩個切換嗎? (如果其中一個是「開」,則指示燈亮,如果兩者都是「關」,指示燈熄滅) – DVarga