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

时间:2018-03-10 02:26:01

标签: javafx-8

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

1 个答案:

答案 0 :(得分:2)

setGraphic需要Node,而不是Image个对象;我假设您使用ImageView s作为图形。

无法从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和/或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();