如何通过CSS添加外部图像

时间:2017-01-14 12:26:22

标签: java css javafx

请考虑以下项目结构

base_folder
          |
          |_ MyApp
          |    |
          |    |_ src
          |        |
          |        |_controllers (Controllers)
          |             |_MyClass.java
          |
          |_ themming
              |
              |_ icons
              |     |
              |     |icon.png
              |
              |_ style (css)
                    |
                    |_myStyle.css

MyClass.java

HBox root = new HBox();
Scene scene = new Scene(root, 800, 605);

File f = new File("../themming/style/myStyle.css");
try {
    root.getStylesheets().setAll(f.toURI().toURL().toExternalForm());
} catch (MalformedURLException e) {
    e.printStackTrace();
}

root.getStyleClass().add("custom-background");

myStyle.css

.custom-background {
    -fx-padding: 15;
    -fx-spacing: 10;
    -fx-font-size: 17pt;
    -fx-background-image: url("../icons/icon.png"));
    -fx-background-size: 22 22;
    -fx-background-position: 0 0;
    -fx-background-repeat: no-repeat;
}

除了与图像有关之外,其他每个样式类都被挑选出来。

我已尝试过各种可能的网址:

File f = new File("themming/style/myStyle.css");
File f = new File("../themming/style/myStyle.css");
File f = new File("../../themming/style/myStyle.css");

甚至将主题放在相对于项目根目录的不同位置,但没有成功。

我在这一切中缺少什么?我做错了什么?

提前谢谢大家。

2 个答案:

答案 0 :(得分:0)

尝试这个:

.custom-background {
-fx-padding: 15;
-fx-spacing: 10;
-fx-font-size: 17pt;
-fx-background-image: url("../icons/icon.png"));
-fx-background-size: 22 22;
-fx-background-position: 0 0;
-fx-background-repeat: no-repeat;
 }

答案 1 :(得分:0)

为什么不直接使用这种方法:

/* "pathToTheMainFolder" : All directories before reaching "themming" */
String path = "file:C:/Users/UserName/pathToTheMainFolder/themming/style/style.css";
root.getStylesheets().add(path);

图标应该与您的css文件所在位置相关:

.custom-background{
/*return to the previous folder "themming" and enter to "icons"*/
-fx-background-image:url("..//icons/icon.png");
}

注意:对于第一个路径(css文件),您可以使用@fabian建议您的方法Here.