JavaFX 如何设置场景背景图片

Posted

技术标签:

【中文标题】JavaFX 如何设置场景背景图片【英文标题】:JavaFX How to set scene background image 【发布时间】:2012-04-02 01:09:12 【问题描述】:

如何设置场景的背景图片?

【问题讨论】:

【参考方案1】:

除了@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))));

使用

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

(不同的最后一个参数)使图像全窗口大小。

【讨论】:

【参考方案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类

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 活着 && 你的 css 死了..

【讨论】:

【参考方案3】:

您可以使用.root class 直接更改场景的样式:

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

将此添加到 CSS 并将其加载为他的回答中描述的“Uluk Biy”。

【讨论】:

糟糕!如何使图像充满整个场景?它在左侧和顶部留下空白。 -fx-background-repeat: stretch; 它仍然留有空间。场景的根是一个 GridPane,我将网格窗格放在场景的中心。如何防止背景图片居中? -fx-background-position: top left; 我正在使用场景构建器将 css 设置为边框窗格,当我运行应用程序时它可以工作,但我没有看到场景构建器有任何变化,你知道如何解决这个问题吗?跨度> 【参考方案4】:

其中一种方法可能是这样的:

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) 将场景中最顶层的控件(或任何控件)的 id 设置为 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 文件中为控件指定一个 ID:

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

有关 JavaFX CSS 样式的更多信息,请参阅guide。

【讨论】:

我之前发布了另一个问题,请帮助链接这里***.com/questions/9736393/… 除了 void start 之外,我可以从另一个功能更改场景背景 @Ossama 是的,你可以。定义两个不同的 CSS 选择器(具有两个不同的背景属性),并在某些方法中将节点的 id 更改为所需的。 我该怎么做。这是我的代码***.com/questions/22572940/… 一个中心还不够吗?

以上是关于JavaFX 如何设置场景背景图片的主要内容,如果未能解决你的问题,请参考以下文章

如何在javafx中制作透明的场景和舞台?

CSS如何设置按钮背景图片

javafx如何设置文本框TextArea背景色为透明

javafx 悬浮窗体的方法

Javafx listview设置背景颜色

如何在 JavaFX 中创建具有透明背景的启动画面