当前位置: 首页 > 知识库问答 >
问题:

JavaFX。设置样式(…)“-fx背景图像”更改时不工作

郜琦
2023-03-14

我想要实现的是:

我正在使用FileChooser,用户选择适当的. jpg图像文件。然后我复制该图像,将其重命名为background.jpg到已知文件夹,并尝试使用. setStyle(...)将其设置为应用程序的背景图像;复制图像没有问题[我正在检查它]

出现的问题:

我有一个带有边框窗格的舞台边框窗格有一个背景图像,我使用

 borderPane.setStyle("-fx-background-image:url('filepath')");

!第一次效果很好!

-

我还尝试再次使用以下命令重置相同的样式:

  borderPane.setStyle("-fx-background-image:url('filepath')");

最后,当我更改文件名时,例如更改为[background-12.jpg]并使用上面的重置样式时,它会更改背景图像。

这到底是什么问题?我的意思是,我确信background.jpg已经创建,我正在检查它,而且当我一次又一次地将名称更改为其他名称时,它仍然有效。

Java CSS解析器是否懒得解析相同但有其他-fx背景图像资源的新样式?

至于文件路径,我相信它是好的,我使用下面的代码:

//Maou is the File URL in appropriate format for CSS
String maou = file.getAbsoluteFile().toURI().toString()

//Here i add the appropriate file separator, if not JavaFX will report error
maou = maou.replaceAll("\\Q\\\\E", "//"); 

//Print maou
System.out.println("Maou=\n" + maou);

解决方案:

我用James_D的答案找到了最好的解决方案,经过了一点修改,它覆盖了整个窗口:

BackgroundImage bgImg = new BackgroundImage(image, BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT,
        new BackgroundSize(window.getWidth(), window.getHeight(), true, true, true, true));

共有2个答案

咸浩初
2023-03-14

虽然我不知道到底发生了什么,但大概是JavaFX正在做的某种形式的缓存以试图“有帮助”。我稍后可能会查看源代码。

不过,老实说,通过CSS设置背景对我来说是错误的。我总是避免明确设置任何样式,例如:

borderPane.setStyle("something");

并且更喜欢添加和删除样式类:

borderPane.getStyleClass().add("foo");
borderPane.getStyleClass().remove("foo");

我认为这在你的情况下是不可能的,所以我会使用StackPaneImageView上分层你的内容。

ImageView img = new ImageView(new Image(new URL("path")));
StackPane stack = new StackPane();
stack.getChildren.addAll(img, /*overlaid content*/);
姬英耀
2023-03-14

与其使用内联样式,我建议直接通过background属性设置背景:

Image img = new Image(file.getAbsoluteFile().toURI().toString());
BackgroundImage bgImg = new BackgroundImage(img, 
    BackgroundRepeat.NO_REPEAT,
    BackgroundRepeat.NO_REPEAT,
    BackgroundPosition.DEFAULT,
    BackgroundSize.DEFAULT);
borderPane.setBackground(new Background(bgImg));

后台类提供JavaAPI编程访问可以由CSS设置的所有相同属性。

 类似资料:
  • 我有一个带有文本块的div元素和一个父div,我在其中设置了一个背景图像。现在我想降低背景图像的不透明度。请建议我怎么做。 提前谢谢。 编辑: 我希望通过编辑 html 内容来改变我的博客文章看待 blogger.com 的方式。html 代码如下所示: 我试图用 div 元素包围上面的整个代码,并分别设置每个 div 的不透明度,如下所示: 但它不起作用。

  • 问题内容: 我有此jquery代码,可在单击时更改背景图像: 但是,它没有改变。有什么我想念的吗? 问题答案: 您需要包括该属性的一部分。

  • 我试图将图像作为JavaFX场景中的背景,但我的代码不起作用。 我试图在java eclipse中制作一个战舰游戏程序,但我遇到了一个图形问题。 当我第一次尝试运行它时,它工作了,一个新的窗口打开了,中间有一个按钮,但bakcground是空白的。当我尝试在窗口中设置一个图像作为背景时,按下“开始”按钮,什么也没有发生…

  • 我正在尝试在javaFX场景中加载背景图像。我在这里找到的答案不起作用。窗口打开,但它是空白的(没有图像)。

  • 问题内容: 如何在运行时更改CSS中的背景图片?我的体内有以下背景图像,可以在运行时更改图像吗? 问题答案: 如果已经加载了JQuery,则可以执行以下操作: 编辑 : 首先在head标签中加载JQuery: 然后,当页面上发生某些事情(例如加载完成时)时,调用Javascript更改背景图片:

  • 我试图使用CSS设置背景图像,但原始图像被拉伸。如何保持原始图像大小,同时设置整个页面的背景? 原始图像为:原始图像 结果是:结果图像 不同的是我的网页背景比原来的要大。 任何帮助都将不胜感激!!!