我正在编写一个JavaFX程序来下棋。目前,我正在使用JavaFX Rectangle类并使用深色和浅色设置它们。但是,当我去添加图像时,即使我故意发现具有清晰背景的图像,它也会清除整个背景。目前我用于将图像放在矩形上的代码是:
rectangleArray[i][row].setFill(new ImagePattern(image));
其中image是我在这种特殊情况下想要的图像。我是否需要使用不同的JavaFX类才能够这样做?或者我只是使用错误的方法?
答案 0 :(得分:1)
您只能在fill
上设置一个Rectangle
。将fill
设置为不同的值会替换旧填充而不是"添加"它。
您应该使用带背景的窗格,并为其添加ImageView
,例如:
@Override
public void start(Stage primaryStage) throws Exception {
final double size = 50;
ImageView pawn = new ImageView("https://upload.wikimedia.org/wikipedia/commons/9/93/Chess_tile_pd.png");
pawn.setFitWidth(size);
pawn.setFitHeight(size);
final Background grey = new Background(new BackgroundFill(Color.GRAY, CornerRadii.EMPTY, Insets.EMPTY));
final Background white = new Background(new BackgroundFill(Color.WHITE, CornerRadii.EMPTY, Insets.EMPTY));
GridPane grid = new GridPane();
ColumnConstraints columnConstraints = new ColumnConstraints(size);
RowConstraints rowConstraints = new RowConstraints(size);
for (int i = 0; i < 8; i++) {
grid.getColumnConstraints().add(columnConstraints);
grid.getRowConstraints().add(rowConstraints);
for (int j = 0; j < 8; j++) {
StackPane field = new StackPane();
field.setBackground(((i + j) & 1) == 0 ? white : grey);
grid.add(field, i, j);
field.setOnMouseClicked(evt -> {
if (pawn.getParent() != field) {
field.getChildren().add(pawn); // move pawn to this field on click
}
});
}
}
((Pane) grid.getChildren().get(0)).getChildren().add(pawn);
Scene scene = new Scene(grid);
primaryStage.setScene(scene);
primaryStage.show();
}