Нажатие 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 шт):
А вам нужно отслеживать именно нажатие на 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))