Comment puis-je définir l'image de fond d'une scène ?
Réponses
Trop de publicités?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 .
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
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.