从FXML和本机包装加载图像

时间:2016-05-02 12:08:24

标签: java javafx fxml

在导出为osx的本机包时,我在从fxml文件的tabpane(按钮等)中加载选项卡图像时遇到了一些问题。

这个代码在从eclipse开始时工作正常,但是当将应用程序导出为本机包时,所有图像都消失了。

<BorderPane stylesheets="@../my.css" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="app.view.MainController">  
   <center>  
      <TabPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" tabClosingPolicy="UNAVAILABLE">  
        <tabs>  
          <Tab fx:id="projectsTab" closable="false">  
            <content>  
              <AnchorPane minHeight="0.0" minWidth="0.0">  
                     <children>  
                        <fx:include source="main/ProjectView.fxml" />  
                     </children>  
              </AnchorPane>  
            </content>  
               <graphic>  
                  <ImageView fitHeight="30.0" fitWidth="30.0" opacity="0.5" pickOnBounds="true" preserveRatio="true">  
                     <image>  
                        <Image url="@../../../resources/images/ic_list_black_48dp_1x.png" />  
                     </image>  
                  </ImageView>  
               </graphic>  
          </Tab> 

使用此代码,也可以在导出为本机包时工作,但我想以fxml的方式进行。

private void initialize() {  
    projectsTab.setGraphic(createTabImage("/images/ic_list_black_48dp_2x.png"));    
}  

private ImageView createTabImage(String pathToImage) {  
     ImageView imgView = new ImageView(new Image(this.getClass().getResource(pathToImage).toExternalForm()));  
     imgView.setFitWidth(30);  
     imgView.setFitHeight(30);  
     imgView.setOpacity(0.5);  
     return imgView;  
}  

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

在大多数IDE设置中,编译项目时不会导出resources文件夹本身,但其内容将部署到类路径的根目录。您没有在问题中显示FXML文件与图像相关的位置,但您可能需要

url="@../../images/ic_list_black_48dp_1x.png"