Как я могу изменить цвет прямоугольника? - PullRequest
0 голосов
/ 06 марта 2019

Где я ошибаюсь в своей логике, чтобы просто изменить цвет прямоугольника при нажатии?

        square.setFill(null);
        square.setStroke(Color.BLACK);
        setAlignment(Pos.CENTER);
        getChildren().addAll(square);

        setOnMouseClicked(event ->{
            if(event.getButton() == MouseButton.PRIMARY) {              
                square.setFill(Color.BLUE);
            }
            else if(square.getFill().equals(Color.BLUE)) {
                    square.setFill(Color.BLACK);
            }


        });

Ответы [ 3 ]

1 голос
/ 06 марта 2019

Я думаю, вам не нужен логический флаг.То, что вы делаете, можно сделать следующим образом:

setOnMouseClicked(event -> {
    if (event.getButton() == MouseButton.PRIMARY) {
       square.setFill(square.getFill() == Color.BLUE ? Color.BLACK : Color.BLUE);
    }
});
0 голосов
/ 06 марта 2019

Проблема, с которой вы можете столкнуться при использовании переменной, заключается в том, что у вас должна быть переменная, которую вы отслеживаете для каждого объекта, для которого вы хотите поддерживать изменение цвета, или ваши объекты, которые меняют цвет, будут срабатывать с одной и той же переменной.

Я думаю, что вы можете сохранить свой исходный код, я думаю, что проблема заключается в вашем утверждении 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);
       }
   }
}
0 голосов
/ 06 марта 2019

В итоге я использовал логическое значение, чтобы указать, является ли прямоугольник синим или нет.

        square.setFill(null);
        square.setStroke(Color.BLACK);
        setAlignment(Pos.CENTER);
        getChildren().addAll(square);

        setOnMouseClicked(event ->{
            if(event.getButton() == MouseButton.PRIMARY) {              
                if(!isBlue) {
                    square.setFill(Color.BLUE);
                    isBlue = true;
                }
                else if(isBlue) {

                    square.setFill(Color.BLACK);
                    isBlue = false;
                }
            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...