Нет, это невозможно сделать с привязкой. Значение привязки вычисляется с помощью метода 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