我有一个国际象棋棋盘,我试图在棋盘上增加一些棋子。板上的每个点都是矩形,因此我认为最好的添加方式是在每个获得矩形的矩形上添加一个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

10-04 21:18
查看更多