Javafx 如何更改矩形的颜色?

Javafx 如何更改矩形的颜色?,javafx,Javafx,单击时更改矩形颜色的逻辑哪里出了问题 square.setFill(null); square.setStroke(Color.BLACK); setAlignment(Pos.CENTER); getChildren().addAll(square); setOnMouseClicked(event ->{ if(event.getButton() == MouseButton.PR

单击时更改矩形颜色的逻辑哪里出了问题

        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);
            }


        });

最后,我使用布尔值来标记矩形是否为蓝色

        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;
                }
            }
        });

我认为您不需要布尔标志。您正在执行的操作可以按以下方式执行:

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

使用变量可能会遇到的问题是,必须为每个要支持颜色更改的对象跟踪一个变量,否则更改颜色的对象都将在同一个变量上触发

我认为您可以保留原始代码,我认为问题在于您的if声明:

setOnMouseClicked(event ->{
    if(event.getButton() == MouseButton.PRIMARY) {              
        square.setFill(Color.BLUE);
    }
    else if(square.getFill().equals(Color.BLUE)) {
            square.setFill(Color.BLACK);
    }
如果您查看它,条件是如果getButton是主按钮,如果为true,它将始终将其设置为蓝色,如果用户未使用主按钮,则仅当颜色为蓝色时,它将设置为黑色

你想要的是:

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

如果您单步通过setOnMouseClicked,会发生什么情况?它会像预期的那样通过两条不同的路径吗?当我单击正方形时,它会变为黑色,跳过蓝色代码。您正在调用什么对象
setOnMouseClicked
on?您似乎没有在
方格上调用它
;看起来你是在
这个
上调用它的。你是不是在左键点击?