Как сохранить цвет фона при добавлении изображения в JavaFX? - PullRequest
0 голосов
/ 10 июня 2018

Я пишу программу JavaFX для игры в шахматы.В настоящее время я использую класс JavaFX Rectangle и настраиваю их на темные и светлые цвета.Однако, когда я иду, чтобы добавить изображение, оно очищает весь фон, хотя я намеренно нашел изображения с чистым фоном.В настоящее время я использую код для размещения изображения в прямоугольниках:

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

, где изображение - это изображение, которое я хочу в данном конкретном случае.Нужно ли использовать разные классы JavaFX для того, чтобы сделать это?Или я просто использую неправильные методы?

1 Ответ

0 голосов
/ 10 июня 2018

Вы можете установить только один 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...