JavaFX:如何在代码中设置背景图像?

时间:2014-10-29 14:10:27

标签: java css javafx

我有一个必须高度自定义的控件,这意味着能够将图像用于控件背景。为此,我需要知道如何在代码中将CSS样式设置为指向用户指定的图像。

我有以下(没有工作,我收到警告"未知协议:c"(我甚至不知道这意味着什么)):

BG = //The CSS String
    "-fx-background-position : 50% 50%;\n" +
    "-fx-background-repeat : no-repeat;\n" +
    "-fx-background-size : contain;\n" +
    "-fx-background-image : url(\"" + GS.bgImage.getAbsolutePath() + "\");\n";

BG += "-fx-border-width : " + GS.borderWidth + ";\n" //For adding the Border
    + "-fx-border-color : " + GS.borderColor.toString();

this.setStyle(BG);

GS是我构建的一个类,控件从中读取信息以了解自己的样子。 GS.bgImage是背景图片控件尝试使用它作为它的背景。那么......我在这里做错了什么?我应该不使用.getAbsolutePath()吗?是别的吗?

1 个答案:

答案 0 :(得分:0)

好的,所以事实证明尝试使用File.getPath()或File.getAbsolutePath()是问题所在。原来使它在你需要使用File.toURI()。toURL()的代码中工作。

所以正确的方法是:

BG = //The CSS String, you need to wrap with a Try/Catch to capture a MalformedURLException, but I'm too lazy to do that here...
    "-fx-background-position : 50% 50%;\n" +
    "-fx-background-repeat : no-repeat;\n" +
    "-fx-background-size : contain;\n" +
    "-fx-background-image : url(\"" + GS.bgImage.toURI().toURL + "\");\n";

BG += "-fx-border-width : " + GS.borderWidth + ";\n" //For adding the Border
    + "-fx-border-color : " + GS.borderColor.toString();