Как установить listener на CheckBox чтобы он вызывался на любое setSelected?

Есть CheckBox, когда он false нужно совершить какое-то действие (например задизэйблить какой-то другой компонент). Я попытался навесить на него соответствующий listener

checkBox.selectedProperty().addListener((observable, oldValue, newValue) -> что-то делаем)

Но проблема в том, что изначально (до checkBox.setSelected(false), происходящего при открытии окна) значение и так false, и действие не выполняется, разумеется можно просто поставить проверку на checkBox после инициализации, но мне кажется логичнее как-то исправить мой listener чтобы он отрабатывал в любом случае.

Как это можно сделать?


Ответы (3 шт):

Автор решения: Andrew Bystrov

Нет, вам неправильно кажется. Лисенер как раз и нужен затем, чтобы при взаимодействии с этим чекбоксом делать какие-либо вещи. Если вам нужно дефолтное поведение - вы должны явно вызвать требуемое поведение.

как костыль можно вызвать checkBox.setSelected(false) после инициализации, и тогда лисенер обнаружит это взаимодействие и отработает

→ Ссылка
Автор решения: Ruslan P.

Если нужно дизейблить компонент, то логичней использовать биндинг (описать состояние, а не поведение):

otherComponent.disableProperty().bind(checkBox.selectedProperty().not());

здесь not() добавлен чтобы инвертировать значение состояния чек-бокса

→ Ссылка
Автор решения: Алексей Босак

Обычно после добавления листенера просто дергаю метод который вызывается внтри листенера. То есть

checkBox.selectedProperty().addListener((ov, oldv, newv) -> doSmth(newv)); doSmth(checkBox.isSelected());

→ Ссылка