我目前正在研究javaFX上的拼图类型的应用程序。我创建了一个二维数组按钮,我使用setGraphic
来插入图片。我想知道是否有办法检索我在setGraphic
上使用的文件名,以便我可以将图片与图片进行比较。我知道有getGraphic
方法,但返回随机数。
答案 0 :(得分:2)
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
和/或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();