Не могу привязать всем кнопкам одно событие
С помощью SceneBuilder я создал много кнопок, в нем же я задал этим кнопкам текст (буквы от A до Z). Теперь я хочу при нажатии на кнопку, чтобы срабатывало происходило некоторое действие, например, вывод текста на кнопке. Я не хочу для каждой кнопки писать отдельный обработчик событий, так как все кнопки выполняют код с минимальными различиями, поэтому нужен какой-то метод, чтобы вызов события можно было привязать ко всем кнопкам. Я пробовал следующие пути решения:
anchorPane.addEventFilter(MouseEvent.MOUSE_PRESSED, event -> {
if(event.getTarget() instanceof Button){
System.out.println("Button" + event.getTarget());
String text = ((Button)event.getTarget()).getText();
((Button)event.getTarget()).setStyle("-fx-background-color: BLACK");
System.out.println(text);
}
});
Данный код находится в методе initialize в классе Controller. Это наиболее близкий вариант решения, которого мне удалось добиться. Но проблема в том, что нажатие на область текста не вызывает срабатывание события.
Код работает, только если нажимать в область зеленой штриховки.
Далее я пробовал еще такой вариант:
@FXML
private void initialize() {
\\scrollPane.setContent(workPane);
Button arrayOfButtons [] = new Button[]{
operandButtonA, operandButtonB, operandButtonC, operandButtonD,operandButtonE,operandButtonF,operandButtonG,operandButtonH,operandButtonI,
operandButtonJ,operandButtonK, operandButtonL, operandButtonM, operandButtonN, operandButtonO, operandButtonP, operandButtonQ,
operandButtonR, operandButtonS, operandButtonT, operandButtonU, operandButtonV, operandButtonW, operandButtonX, operandButtonY,
operandButtonZ};
for(int i = 0; i < arrayOfButtons.length; i++){
arrayOfButtons[i].setOnMouseClicked(event -> {System.out.println(arrayOfButtons[i].getText()); \\ ошибка
});
}
}
В цикле я пытался каждой кнопке добавить обработчик клика. С этим кодом у меня возникает ошибка в компиляторе
local variables referenced from a lambda expression must be final or effectively final
Я застрял и я не знаю, что мне делать.