我有一个必须高度自定义的控件,这意味着能够将图像用于控件背景。为此,我需要知道如何在代码中将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()
吗?是别的吗?
答案 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();