获取在 setGraphic() 上使用的文件名
Getting filename that was used on setGraphic()
我目前正在 javaFX 上开发一款拼图类应用程序。我创建了一个二维按钮数组,我使用 setGraphic
来插入图片。我想知道是否有办法检索我在 setGraphic
上使用的文件名,以便我可以一起比较图片。我知道有一个 getGraphic
方法但是 returns 随机数。
setGraphic
接受 Node
,而不是 Image
对象;我假设您使用 ImageView
s 作为图形。
无法从 Image
对象中检索文件名,因为您不需要将 url 传递给 Image
构造函数,但也可以传递 InputStream
。 InputStream
不提供有关其来源的任何信息,Image
也不提供。
要从图像中获取文件路径,您需要自己存储信息,例如:
private final Map<Image, String> imageFileNames = new IdentityHashMap<>();
public Image loadImage(String filename) throws MalformedURLException {
File file = new File(filename);
Image image = new Image(file.toURI().toURL().toExternalForm());
imageFileNames.put(image, filename);
return image;
}
public String getImageFileName(Image image) {
return imageFileNames.get(image);
}
对于包含 ImageView
作为图形的节点,您可以这样做:
ImageView view = (ImageView) node.getGraphic();
Image img = view.getImage();
String fileName = getImageFieldName(img);
可能会添加空检查,如果graphic
and/or image
可以null
.
如果您愿意,您还可以在节点的 userData
或 properties
中获取数据:
存储
File file = new File(filename);
ImageView imageView = new ImageView(file.toURI().toURL().toExternalForm());
imageView.setUserData(filename);
正在检索
String filename = (String) node.getGraphic().getUserData();
我目前正在 javaFX 上开发一款拼图类应用程序。我创建了一个二维按钮数组,我使用 setGraphic
来插入图片。我想知道是否有办法检索我在 setGraphic
上使用的文件名,以便我可以一起比较图片。我知道有一个 getGraphic
方法但是 returns 随机数。
setGraphic
接受 Node
,而不是 Image
对象;我假设您使用 ImageView
s 作为图形。
无法从 Image
对象中检索文件名,因为您不需要将 url 传递给 Image
构造函数,但也可以传递 InputStream
。 InputStream
不提供有关其来源的任何信息,Image
也不提供。
要从图像中获取文件路径,您需要自己存储信息,例如:
private final Map<Image, String> imageFileNames = new IdentityHashMap<>();
public Image loadImage(String filename) throws MalformedURLException {
File file = new File(filename);
Image image = new Image(file.toURI().toURL().toExternalForm());
imageFileNames.put(image, filename);
return image;
}
public String getImageFileName(Image image) {
return imageFileNames.get(image);
}
对于包含 ImageView
作为图形的节点,您可以这样做:
ImageView view = (ImageView) node.getGraphic();
Image img = view.getImage();
String fileName = getImageFieldName(img);
可能会添加空检查,如果graphic
and/or image
可以null
.
如果您愿意,您还可以在节点的 userData
或 properties
中获取数据:
存储
File file = new File(filename);
ImageView imageView = new ImageView(file.toURI().toURL().toExternalForm());
imageView.setUserData(filename);
正在检索
String filename = (String) node.getGraphic().getUserData();