Проблема, с которой вы можете столкнуться при использовании переменной, заключается в том, что у вас должна быть переменная, которую вы отслеживаете для каждого объекта, для которого вы хотите поддерживать изменение цвета, или ваши объекты, которые меняют цвет, будут срабатывать с одной и той же переменной.
Я думаю, что вы можете сохранить свой исходный код, я думаю, что проблема заключается в вашем утверждении if:
setOnMouseClicked(event ->{
if(event.getButton() == MouseButton.PRIMARY) {
square.setFill(Color.BLUE);
}
else if(square.getFill().equals(Color.BLUE)) {
square.setFill(Color.BLACK);
}
Если вы посмотрите на это, условие, если getButton является Primary и если true, он всегда будет установлен на синий цвет, и если пользователь не использовал основную кнопку, он будет установлен на черный, только если цвет синий.
Вы хотите что-то вроде:
setOnMouseClicked(event ->{
if(event.getButton() == MouseButton.PRIMARY) {
if(!square.getFill().equals(Color.BLUE)) {
square.setFill(Color.BLUE);
}
else
square.setFill(Color.BLACK);
}
}
}