我想要的是我的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。
答案 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()));
}
}