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?您似乎没有在方格上调用它
;看起来你是在这个上调用它的。你是不是在左键点击?