Нажатие ToggleButton

Я храню ObservableList, в каждом из которых присутствует ToggleButton, который управляет соответствующим ему потоком через

on.setOnAction(event -> {
            if (on.isSelected()) {
                on.setGraphic(viewOn);
                thread.resume();
            }
            else {
                on.setGraphic(viewOff);
                thread.suspend();
            }
            checkActivity();
});

Я хочу добавить возможность разом переключать ToggleButton на всех элементах ObservableList, т.е. добавить глобальный ToggleButton вроде "All on/off". Проблема заключается в том, при реальном нажатии мыши пользователем значение isSelected меняется, а когда делаешь

for (AnchorPane bot: listOfBots) {
     bot.getChildren().get(1).fireEvent(new ActionEvent());
}

, то переключения не происходит и выполняется только прописанное в setOnAction(). Соответственно значение значения isSelected - неверные и ничего не происходит. Как можно решить это? Для лучшего понимания ситуации добавил скриншот. Для наглядности


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

Автор решения: FatCatStudent

А вам нужно отслеживать именно нажатие на ToggleButton или всё-таки отслеживать изменение положения статуса selected?

Если второе, то слушатель нужно вешать на событие изменения статуса selected

ToggleButton toggleButton = new ToggleButton();
toggleButton.selectedProperty().addListener((observable, oldValue, newValue) -> {
    if (newValue) {
        System.out.println("Do this");
    }
});
toggleButton.setSelected(true);

В результате выполнения кода, toggleButton будет и отображаться как выбранный, а так же произойдёт выполнение кода события.

Т.е. вам нужно поменять тип события с onAction на изменение статуса selected (selectedProperty().addListener) и не отправлять ложное событие (bot.getChildren().get(1).fireEvent(new ActionEvent()); ), а просто изменять selected (bot.getChildren().get(1).setSelected(true))

→ Ссылка