获取在 setGraphic() 上使用的文件名

Getting filename that was used on setGraphic()

我目前正在 javaFX 上开发一款拼图类应用程序。我创建了一个二维按钮数组,我使用 setGraphic 来插入图片。我想知道是否有办法检索我在 setGraphic 上使用的文件名,以便我可以一起比较图片。我知道有一个 getGraphic 方法但是 returns 随机数。

setGraphic 接受 Node,而不是 Image 对象;我假设您使用 ImageViews 作为图形。

无法从 Image 对象中检索文件名,因为您不需要将 url 传递给 Image 构造函数,但也可以传递 InputStreamInputStream 不提供有关其来源的任何信息,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.


如果您愿意,您还可以在节点的 userDataproperties 中获取数据:

存储

File file = new File(filename);
ImageView imageView = new ImageView(file.toURI().toURL().toExternalForm());
imageView.setUserData(filename);

正在检索

String filename = (String) node.getGraphic().getUserData();