Установка фонового изображения по коду javafx (не css) - PullRequest
7 голосов
/ 24 марта 2012

Я пытаюсь установить изображение в качестве фона, используя этот код:

root.setStyle("-fx-background-image: url('splash.jpg'); 
               -fx-background-position: center center; 
               -fx-background-repeat: stretch;");

Но это не работает.Если я установлю его с помощью CSS, он отлично работает:

root.setId("pane");
primaryStage.getScene().getStylesheets().add(JavaFXApplication9.class.getResource("style.css").toExternalForm());

и CSS:

#pane{
   -fx-background-image: url('splash.jpg');
   -fx-background-repeat: stretch;   
   -fx-background-position: center center;
}

Все мои файлы (основной класс, CSS и изображение) помещены в один пакет

Итак, как мне установить фоновое изображение с помощью кода?Или, как я могу переопределить (заменить) строки о фоновом изображении некоторого элемента в CSS из кода приложения?Спасибо!

Ответы [ 2 ]

14 голосов
/ 24 марта 2012

Попробуйте следующее:

String image = JavaFXApplication9.class.getResource("splash.jpg").toExternalForm();
root.setStyle("-fx-background-image: url('" + image + "'); " +
           "-fx-background-position: center center; " +
           "-fx-background-repeat: stretch;");
10 голосов
/ 29 марта 2015

Если вы действительно не хотите использовать CSS или метод setStyle(), вы можете использовать следующее:

// new Image(url)
Image image = new Image(CurrentClass.class.getResource("/path/to/package/bg.jpg"));
// new BackgroundSize(width, height, widthAsPercentage, heightAsPercentage, contain, cover)
BackgroundSize backgroundSize = new BackgroundSize(100, 100, true, true, true, false);
// new BackgroundImage(image, repeatX, repeatY, position, size)
BackgroundImage backgroundImage = new BackgroundImage(image, BackgroundRepeat.REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.CENTER, backgroundSize);
// new Background(images...)
Background background = new Background(backgroundImage);

Подробную документацию по BackgroundImage можно найти здесь .

(Простите за ответ на этот старый вопрос.)

...