Как установить listener на CheckBox чтобы он вызывался на любое setSelected?
Есть CheckBox, когда он false нужно совершить какое-то действие (например задизэйблить какой-то другой компонент). Я попытался навесить на него соответствующий listener
checkBox.selectedProperty().addListener((observable, oldValue, newValue) -> что-то делаем)
Но проблема в том, что изначально (до checkBox.setSelected(false), происходящего при открытии окна) значение и так false, и действие не выполняется, разумеется можно просто поставить проверку на checkBox после инициализации, но мне кажется логичнее как-то исправить мой listener чтобы он отрабатывал в любом случае.
Как это можно сделать?
Ответы (3 шт):
Нет, вам неправильно кажется. Лисенер как раз и нужен затем, чтобы при взаимодействии с этим чекбоксом делать какие-либо вещи. Если вам нужно дефолтное поведение - вы должны явно вызвать требуемое поведение.
как костыль можно вызвать checkBox.setSelected(false) после инициализации, и тогда лисенер обнаружит это взаимодействие и отработает
Если нужно дизейблить компонент, то логичней использовать биндинг (описать состояние, а не поведение):
otherComponent.disableProperty().bind(checkBox.selectedProperty().not());
здесь not() добавлен чтобы инвертировать значение состояния чек-бокса
Обычно после добавления листенера просто дергаю метод который вызывается внтри листенера. То есть
checkBox.selectedProperty().addListener((ov, oldv, newv) -> doSmth(newv));
doSmth(checkBox.isSelected());