47 votes

JavaFX Comment définir l'image d'arrière-plan d'une scène

Comment puis-je définir l'image de fond d'une scène ?

50voto

Uluk Biy Points 15426

L'une des approches peut être la suivante :

1) Créez un fichier CSS avec le nom "style.css" et définissez-y un sélecteur id :

#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) Définissez l'id du contrôle le plus haut (ou de n'importe quel contrôle) dans la scène avec la valeur définie dans le CSS et chargez ce fichier CSS dans la scène :

  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();
    }
}

Vous pouvez également donner un id au contrôle dans un fichier FXML :

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

Pour plus d'informations sur le stylisme CSS de JavaFX, consultez le site suivant guide .

43voto

Elltz Points 8547

Je sais que c'est une vieille question

Mais si vous voulez le faire de manière programmatique ou à la manière de Java

Pour les fonds d'image, vous pouvez utiliser Image de fond classe

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));

Pour les fonds de peinture ou de remplissage ; vous pouvez utiliser BackgroundFill classe

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));

Gardez votre java en vie et votre css mort

17voto

Sergey Grinev Points 15565

Vous pouvez modifier le style directement pour la scène en utilisant .root classe :

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

Ajoutez ceci au CSS et chargez-le comme "Uluk Biy" l'a décrit dans sa réponse.

4voto

JeSa Points 419

En plus de la réponse de @Elltz, nous pouvons utiliser à la fois le remplissage et l'image pour l'arrière-plan :

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))));

Utilice

setBackground(
                new Background(
                        Collections.singletonList(new BackgroundFill(
                                Color.WHITE,
                                new CornerRadii(0),
                                new Insets(0))),
                        Collections.singletonList(new BackgroundImage(
                                new Image("file:clouds.jpg", 100, 100, false, true),
                                BackgroundRepeat.NO_REPEAT,
                                BackgroundRepeat.NO_REPEAT,
                                BackgroundPosition.DEFAULT,
                                new BackgroundSize(1.0, 1.0, true, true, false, false)
                        ))));

(dernier argument différent) pour que l'image ait la taille d'une fenêtre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X