通过javafx代码设置背景图像(不是css)

Gle*_*leb 7 javafx-2

我正在尝试使用以下代码将图像设置为背景:

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

但它不起作用.如果我用CSS设置它,它完美地工作:

root.setId("pane");
primaryStage.getScene().getStylesheets().add(JavaFXApplication9.class.getResource("style.css").toExternalForm());
Run Code Online (Sandbox Code Playgroud)

和CSS:

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

我的所有文件(主类,CSS和图像)都放在同一个包中.

那么,如何使用代码设置背景图像?或者,如何从应用程序代码中覆盖(替换)CSS中某些元素的背景图像的线条?谢谢!

Ser*_*nev 14

试试下一个:

String image = JavaFXApplication9.class.getResource("splash.jpg").toExternalForm();
root.setStyle("-fx-background-image: url('" + image + "'); " +
           "-fx-background-position: center center; " +
           "-fx-background-repeat: stretch;");
Run Code Online (Sandbox Code Playgroud)


Reg*_*ser 11

如果您确实不想使用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);
Run Code Online (Sandbox Code Playgroud)

您可以在BackgroundImage 此处找到详细的文档.

(很抱歉回复这个老问题.)