Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaFX中添加图像时保持背景色?_Java_Javafx - Fatal编程技术网

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

如何在JavaFX中添加图像时保持背景色?,java,javafx,Java,Javafx,我正在写一个JavaFX程序来下棋。目前,我正在使用JavaFX矩形类,并将它们设置为深色和浅色。然而,当我去添加图像时,它会清除整个背景,即使我故意找到背景清晰的图像。目前,我用于将图像放置在矩形上的代码是: rectangleArray[i][row].setFill(new ImagePattern(image)); 其中image是我在这个特殊情况下想要的图像。我是否需要使用不同的JavaFX类才能做到这一点?还是我只是使用了错误的方法?您只能在矩形上设置一个填充。将fill设置为不同

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

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

其中image是我在这个特殊情况下想要的图像。我是否需要使用不同的JavaFX类才能做到这一点?还是我只是使用了错误的方法?

您只能在
矩形上设置一个
填充。将
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();
}
@覆盖
public void start(Stage primaryStage)引发异常{
最终双尺寸=50;
ImageView pawn=新的ImageView(“https://upload.wikimedia.org/wikipedia/commons/9/93/Chess_tile_pd.png");
典当。设置宽度(尺寸);
典当。设置高度(尺寸);
最终背景灰=新背景(新背景填充(Color.GRAY,CornerRadii.EMPTY,Insets.EMPTY));
最终背景白色=新背景(新背景填充(Color.white,CornerRadii.EMPTY,Insets.EMPTY));
GridPane grid=新建GridPane();
ColumnConstraints ColumnConstraints=新的ColumnConstraints(大小);
RowConstraints RowConstraints=新的RowConstraints(大小);
对于(int i=0;i<8;i++){
grid.getColumnConstraints().add(columnConstraints);
grid.getRowConstraints().add(rowConstraints);
对于(int j=0;j<8;j++){
StackPane字段=新建StackPane();
立根场(((i+j)和1)==0?白色:灰色);
网格。添加(字段,i,j);
field.setOnMouseClicked(evt->{
if(pawn.getParent()!=字段){
field.getChildren().add(pawn);//单击将pawn移动到此字段
}
});
}
}
((窗格)grid.getChildren().get(0)).getChildren().add(pawn);
场景=新场景(网格);
初级阶段。场景(场景);
primaryStage.show();
}

您只能在
矩形
上设置一个
填充
。将
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();
}
@覆盖
public void start(Stage primaryStage)引发异常{
最终双尺寸=50;
ImageView pawn=新的ImageView(“https://upload.wikimedia.org/wikipedia/commons/9/93/Chess_tile_pd.png");
典当。设置宽度(尺寸);
典当。设置高度(尺寸);
最终背景灰=新背景(新背景填充(Color.GRAY,CornerRadii.EMPTY,Insets.EMPTY));
最终背景白色=新背景(新背景填充(Color.white,CornerRadii.EMPTY,Insets.EMPTY));
GridPane grid=新建GridPane();
ColumnConstraints ColumnConstraints=新的ColumnConstraints(大小);
RowConstraints RowConstraints=新的RowConstraints(大小);
对于(int i=0;i<8;i++){
grid.getColumnConstraints().add(columnConstraints);
grid.getRowConstraints().add(rowConstraints);
对于(int j=0;j<8;j++){
StackPane字段=新建StackPane();
立根场(((i+j)和1)==0?白色:灰色);
网格。添加(字段,i,j);
field.setOnMouseClicked(evt->{
if(pawn.getParent()!=字段){
field.getChildren().add(pawn);//单击将pawn移动到此字段
}
});
}
}
((窗格)grid.getChildren().get(0)).getChildren().add(pawn);
场景=新场景(网格);
初级阶段。场景(场景);
primaryStage.show();
}

使用
堆叠窗格
。使用
堆栈窗格