Search code examples
javajavafximageviewbackground-imageborderpane

javafx-Replacing background image of a BorderPane


I have a BorderPane on a Scene .& I have a background image in that pane. My code for that image:

BorderPane B_pane = new BorderPane();
Image image = new Image("/Client/social3.png",width,height,false,true,true);
ImageView imageView = new ImageView(image);
B_pane.getChildren().add(imageView);

Later I have added some VBox as Left , Right portion in that pane.I want to change the background image of that BorderPane(Obviously without causing any change in the VBox's position,element) with particular Button click.How can I do it?


Solution

  • Just really use a background image instead of adding a ImageView as child:

    @Override
    public void start(Stage primaryStage) {
        BorderPane borderPane = new BorderPane();
        Image image1 = new Image("https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/se/se-logo.png?v=dd7153fcc7fa");
        Image image2 = new Image("https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-logo.png?v=9c558ec15d8a");
    
        BackgroundSize bSize = new BackgroundSize(BackgroundSize.AUTO, BackgroundSize.AUTO, false, false, true, false);
    
        Background background2 = new Background(new BackgroundImage(image2,
                BackgroundRepeat.NO_REPEAT,
                BackgroundRepeat.NO_REPEAT,
                BackgroundPosition.CENTER,
                bSize));
    
        borderPane.setBackground(new Background(new BackgroundImage(image1,
                BackgroundRepeat.NO_REPEAT,
                BackgroundRepeat.NO_REPEAT,
                BackgroundPosition.CENTER,
                bSize)));
    
        Button btn = new Button("Change Background");
        btn.setOnAction((ActionEvent event) -> {
            borderPane.setBackground(background2);
        });
    
        borderPane.setCenter(btn);
    
        Scene scene = new Scene(borderPane, 600, 400);
    
        primaryStage.setScene(scene);
        primaryStage.show();
    }