具有变量 url 的 fxml 文件上的 JavaFx 图像
JavaFx Image on an fxml file who have a variable url
我试图在 google 上找到我的答案,但现在没有结果。
如果问题已经解决了,我很抱歉 post。
我想做什么:加载我的 FXML 文件时,我希望此文件中的 imageView 从 URL 加载图像,该图像包含在 table 的字符串中,该字符串包含差异 URLs,因此我可以根据我的 choice
变量在加载时切换图像。我试过绝对路径和相对路径。
我的主要观点:
//url tab of the 2 images
public static String[] images = new String[2];
//variable that include the choice for the image to load in the tab images
public static int choice = 0;
public MainTest() {
images[0] = "C:/Users/Stagiaire ACI/Desktop/Java/ImageTestImage/Assasin.png";
images[1] = "C:/Users/Stagiaire ACI/Desktop/Java/ImageTestImage/Barde.png";
}
我的 fxml 文件控制器:
@FXML
private ImageView image;
@FXML
private void initialize() {
Image image = new Image(MainTest.images[MainTest.choice]);
this.image.setImage(image);
}
还有我的 Fxml 文件:
<AnchorPane prefHeight="600.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.test.view.TestControler">
<children>
<ImageView fx:id="image" fitHeight="310.0" fitWidth="319.0" layoutX="306.0" layoutY="183.0" pickOnBounds="true" preserveRatio="true" />
</children>
</AnchorPane>
因此,我可以更改 choice
以更改加载时的图像。
当我用经典方式加载时,我的图像效果很好。
甚至不知道这是否可能。
谢谢!
编辑:我通过将 file:
放在文件 url.
之上解决了我的问题
URL 值以 @
开头的属性被 FXMLLoader
区别对待。它们被视为相对于文档。这在 fxmls 之外不起作用。
绝对文件路径也不起作用,因为它们不包含协议。
如果您的图片是资源,您应该使用 Class.getResource
,如果不是,请使用 File.toURI().toURL()
:
images[0] = MainTest.class.getResource("/absolute/package/path/Assasin.png").toExternalForm();
images[1] = new File("C:/Users/Stagiaire ACI/Desktop/Java/ImageTestImage/Barde.png").toURI().toURL().toExternalForm();
我试图在 google 上找到我的答案,但现在没有结果。
如果问题已经解决了,我很抱歉 post。
我想做什么:加载我的 FXML 文件时,我希望此文件中的 imageView 从 URL 加载图像,该图像包含在 table 的字符串中,该字符串包含差异 URLs,因此我可以根据我的 choice
变量在加载时切换图像。我试过绝对路径和相对路径。
我的主要观点:
//url tab of the 2 images
public static String[] images = new String[2];
//variable that include the choice for the image to load in the tab images
public static int choice = 0;
public MainTest() {
images[0] = "C:/Users/Stagiaire ACI/Desktop/Java/ImageTestImage/Assasin.png";
images[1] = "C:/Users/Stagiaire ACI/Desktop/Java/ImageTestImage/Barde.png";
}
我的 fxml 文件控制器:
@FXML
private ImageView image;
@FXML
private void initialize() {
Image image = new Image(MainTest.images[MainTest.choice]);
this.image.setImage(image);
}
还有我的 Fxml 文件:
<AnchorPane prefHeight="600.0" prefWidth="900.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.test.view.TestControler">
<children>
<ImageView fx:id="image" fitHeight="310.0" fitWidth="319.0" layoutX="306.0" layoutY="183.0" pickOnBounds="true" preserveRatio="true" />
</children>
</AnchorPane>
因此,我可以更改 choice
以更改加载时的图像。
当我用经典方式加载时,我的图像效果很好。
甚至不知道这是否可能。
谢谢!
编辑:我通过将 file:
放在文件 url.
URL 值以 @
开头的属性被 FXMLLoader
区别对待。它们被视为相对于文档。这在 fxmls 之外不起作用。
绝对文件路径也不起作用,因为它们不包含协议。
如果您的图片是资源,您应该使用 Class.getResource
,如果不是,请使用 File.toURI().toURL()
:
images[0] = MainTest.class.getResource("/absolute/package/path/Assasin.png").toExternalForm();
images[1] = new File("C:/Users/Stagiaire ACI/Desktop/Java/ImageTestImage/Barde.png").toURI().toURL().toExternalForm();