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