在javafx中定义<img/>标记

时间:2015-02-23 19:57:57

标签: java javafx javafx-8

我想要的是我的GUI组件(导出为jar文件,并由其他组件使用)可以使用存储在其jar文件旁边的图像文件夹中的图像动态更改图像。因此,在标记中使用url不是一种选择,因为无论我如何尝试,我的jxml文件都无法在jar文件中包含图像资源时找到它。
因此我试着这样:

  

在我的avatar.jxml文件中

<ImageView>
    <image>
        <Image fx:id="myImage"/>
    </image>
</ImageView>
  

在我的Java文件中

public Image myImage = new Image("location of an image stored on computer");
URL location = getClass().getResource("avatar.fxml");
ResourceBundle resources = ResourceBundle.getBundle("myResource");
FXMLLoader fxmlLoader = new FXMLLoader(location, resources);
Pane root = (Pane)fxmlLoader.load();
MyController controller = (MyController)fxmlLoader.getController();

但是当我尝试运行该程序时,javaFX抛出异常并且要求Image标记中的url不应为null。
有人可以告诉我,我做错了什么?
非常感谢你。
P / S简化了代码,方便您阅读。我正在使用Java 8。

1 个答案:

答案 0 :(得分:2)

如错误所示,必须使用图片数据的网址初始化Image

如果您希望能够动态更改显示的图像,则需要将ImageView(可以初始化&#34;空&#34;,即没有图像)注入控制器,然后根据需要在其上设置图像。

所以在FXML中只做

<ImageView fx:id="myImageView" />

并在控制器中执行

public class MyController {

    @FXML
    private ImageView myImageView ;

    public void initialize() { // or in an event handler, or when you externally set the image, etc
        Path imageFile = Paths.get("/path/to/image/file");
        myImageView.setImage(new Image(imageFile.toUri().toURL().toExternalForm()));

    }
}