Подтвердить что ты не робот

JavaFX Как установить фоновое изображение сцены

Как установить фоновое изображение сцены?

4b9b3361

Ответ 1

Один из подходов может быть таким:

1) Создайте файл CSS с именем "style.css" и определите в нем селектор 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) Установите идентификатор самого верхнего элемента управления (или любого элемента управления) в сцене со значением, определенным в CSS, и загрузите этот файл CSS в сцену:

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

Вы также можете указать идентификатор элемента управления в файле FXML:

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

Подробнее о стиле JavaFX CSS Styling см. в этом руководстве.

Ответ 2

Я знаю, что это старый вопрос

Но если вы хотите сделать это программно или java-способом

Для изображений фона; вы можете использовать BackgroundImage класс

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

Для рисования или заливки фона; вы можете использовать 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));

Сохраняет ваш java live && ваш css мертв.

Ответ 3

Вы можете изменить стиль непосредственно для сцены с помощью .root class:

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

Добавьте это в CSS и загрузите его как "Улук Бий", описанный в его ответе.

Ответ 4

В дополнение к ответу @Elltz мы можем использовать и заливку, и изображение для фона:

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