У меня есть модель с булевым свойством, которое можно переключить. Однако в зависимости от условий переключение свойств может завершиться неудачей.Флажок JavaFX не соответствует значению связанного свойства
Я хочу привязать это свойство к флажку в моем пользовательском интерфейсе, кроме того, если свойство не переключается, я хочу, чтобы флажок оставался в прежнем состоянии.
Я создал SSCCE для данного ниже. У меня есть логическое свойство, которое эмулирует неудачный переход из false в true, просто устанавливая значение false вне зависимости от аргумента. Флажок изначально имеет значение false, также как и логическое свойство.
Я ожидаю, что, когда я нажму на флажок, он останется не установленным, потому что это состояние логического свойства, с которым оно связано. Однако это не так, он будет счастливо переключиться.
Есть ли что-то, что я могу сделать с этим в свойствах boolean, или мне нужно обойти это, не привязывая свойство вообще и использовать прослушиватели и обработчики событий?
SSCCE:
import javafx.application.Application;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.stage.Stage;
public class PropertySSCCE extends Application {
BooleanProperty property = new SimpleBooleanProperty(false) {
@Override
public void set(boolean newValue) {
super.set(false);
fireValueChangedEvent();
}
@Override
public void setValue(Boolean v) {
super.setValue(false);
fireValueChangedEvent();
}
};
@Override
public void start(Stage aStage) throws Exception {
CheckBox cb = new CheckBox();
cb.selectedProperty().bindBidirectional(property);
Scene scene = new Scene(cb);
aStage.setScene(scene);
aStage.show();
}
public static void main(String[] args) {
launch();
}
}
Глядя на код 'bindBidirectional', когда одно значение изменяет "обновление" установлен флаг, так что вы не получите цикл обновления. Вот почему он не работает. Я не знаю лучшего решения, чем пользовательские слушатели. источник: http://grepcode.com/file/repo1.maven.org/maven2/net.java.openjfx.backport/openjfx-78-backport/1.8.0-ea-b96.1/com/sun/ JavaFX/связывания/BidirectionalBinding.java # BidirectionalBinding.BidirectionalBooleanBinding – Itai