JavaFX How to set scene background image

后端 未结 4 652
梦如初夏
梦如初夏 2020-11-27 16:18

How can I set the background image of a scene?

相关标签:
4条回答
  • 2020-11-27 16:26

    You can change style directly for scene using .root class:

    .root {
        -fx-background-image: url("https://www.google.com/images/srpr/logo3w.png");
    }
    

    Add this to CSS and load it as "Uluk Biy" described in his answer.

    0 讨论(0)
  • 2020-11-27 16:42

    I know this is an old Question

    But in case you want to do it programmatically or the java way

    For Image Backgrounds; you can use BackgroundImage class

    BackgroundImage myBI= new BackgroundImage(new Image("my url",32,32,false,true),
            BackgroundRepeat.REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT,
              BackgroundSize.DEFAULT);
    //then you set to your node
    myContainer.setBackground(new Background(myBI));
    

    For Paint or Fill Backgrounds; you can use BackgroundFill class

    BackgroundFill myBF = new BackgroundFill(Color.BLUEVIOLET, new CornerRadii(1),
             new Insets(0.0,0.0,0.0,0.0));// or null for the padding
    //then you set to your node or container or layout
    myContainer.setBackground(new Background(myBF));
    

    Keeps your java alive && your css dead..

    0 讨论(0)
  • 2020-11-27 16:42

    In addition to @Elltz answer, we can use both fill and image for background:

    someNode.setBackground(
                new Background(
                        Collections.singletonList(new BackgroundFill(
                                Color.WHITE, 
                                new CornerRadii(500), 
                                new Insets(10))),
                        Collections.singletonList(new BackgroundImage(
                                new Image("image/logo.png", 100, 100, false, true),
                                BackgroundRepeat.NO_REPEAT,
                                BackgroundRepeat.NO_REPEAT,
                                BackgroundPosition.CENTER,
                                BackgroundSize.DEFAULT))));
    
    0 讨论(0)
  • 2020-11-27 16:46

    One of the approaches may be like this:

    1) Create a CSS file with name "style.css" and define an id selector in it:

    #pane{
        -fx-background-image: url("background_image.jpg");
        -fx-background-repeat: stretch;   
        -fx-background-size: 900 506;
        -fx-background-position: center center;
        -fx-effect: dropshadow(three-pass-box, black, 30, 0.5, 0, 0); 
    }
    

    2) Set the id of the most top control (or any control) in the scene with value defined in CSS and load this CSS file into the scene:

      public class Test extends Application {
    
        public static void main(String[] args) {
            launch(args);
        }
    
        @Override
        public void start(Stage primaryStage) {
            StackPane root = new StackPane();
            root.setId("pane");
            Scene scene = new Scene(root, 300, 250);
            scene.getStylesheets().addAll(this.getClass().getResource("style.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();
        }
    }
    

    You can also give an id to the control in a FXML file:

    <StackPane id="pane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml" fx:controller="demo.Sample">
        <children>
        </children>
    </StackPane>
    

    For more info about JavaFX CSS Styling refer to this guide.

    0 讨论(0)
提交回复
热议问题