我有一个国际象棋棋盘,我试图在棋盘上增加一些棋子。板上的每个点都是矩形,因此我认为最好的添加方式是在每个获得矩形的矩形上添加一个ImagePattern。我遇到的问题是,当我将ImagePattern添加到Rectangle中时,尽管添加了ImagePattern之前的颜色是什么,它都会使Rectangle的背景变为白色。所以我的问题是,添加ImagePattern后,是否有办法保留矩形的背景色?
出于演示目的,我的代码仅增加了一块。
public class ChessBoard extends Application {
GridPane root = new GridPane();
final int size = 8;
public void start(Stage primaryStage) {
for (int row = 0; row < size; row++) {
for (int col = 0; col < size; col++) {
Rectangle square = new Rectangle();
Color color;
if ((row + col) % 2 == 0)
color = Color.WHITE;
else
color = Color.BLACK;
square.setFill(color);
root.add(square, col, row);
if(row == 4 && col == 3){
Image p = new Image("Peices/Black/0.png");
ImagePattern pat = new ImagePattern(p);
square.setFill(pat);
}
square.widthProperty().bind(root.widthProperty().divide(size));
square.heightProperty().bind(root.heightProperty().divide(size));
square.setOnMouseClicked(e->{
square.setFill(Color.BLUE);
});
}
}
primaryStage.setScene(new Scene(root, 400, 400));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
最佳答案
我认为您正在搜索使用BlendMode完成的混合。例如:
Image p = new Image("Peices/Black/0.png");
ImagePattern pat = new ImagePattern(p);
Rectangle r1 = new Rectangle();
r1.setX(50);
r1.setY(50);
r1.setWidth(50);
r1.setHeight(50);
r1.setFill(pat);
Rectangle r = new Rectangle();
r.setX(50);
r.setY(50);
r.setWidth(50);
r.setHeight(50);
r.setFill(Color.BLUE);
r.setBlendMode(BlendMode.ADD);
据我所知,没有直接的方法可以做到这一点。
资料来源:https://docs.oracle.com/javase/8/javafx/api/javafx/scene/effect/BlendMode.html