如何在JavaFX中添加图像时保持背景颜色?

时间:2018-06-10 01:34:49

标签: java javafx

我正在编写一个JavaFX程序来下棋。目前,我正在使用JavaFX Rectangle类并使用深色和浅色设置它们。但是,当我去添加图像时,即使我故意发现具有清晰背景的图像,它也会清除整个背景。目前我用于将图像放在矩形上的代码是:

rectangleArray[i][row].setFill(new ImagePattern(image));

其中image是我在这种特殊情况下想要的图像。我是否需要使用不同的JavaFX类才能够这样做?或者我只是使用错误的方法?

1 个答案:

答案 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();
}