如何设置场景的背景图像?
答案 0 :(得分:35)
其中一种方法可能是这样的:
1)创建一个名为“style.css”的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中定义的值设置场景中最顶层控件(或任何控件)的id,并将此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文件中为控件提供id:
<StackPane id="pane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml" fx:controller="demo.Sample">
<children>
</children>
</StackPane>
有关JavaFX CSS样式的更多信息,请参阅此guide。
答案 1 :(得分:30)
我知道这是一个老问题
但是如果你想以编程方式或java方式
用于图像背景;你可以使用BackgroundImage class
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活着&amp;&amp;你的死... ..
答案 2 :(得分:11)
您可以使用.root
类直接更改场景的样式:
.root {
-fx-background-image: url("https://www.google.com/images/srpr/logo3w.png");
}
将此添加到CSS并将其加载为答案中描述的“Uluk Biy”。
答案 3 :(得分:0)
除了@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))));