JavaFX:ImageView只显示一次Image

时间:2016-03-29 09:56:19

标签: java javafx

在我的JavaFX应用程序中,我使用TreeView。单个TreeItems包含一个图像。不幸的是,图像只显示一次。

a gif showing the problem

加载图像的代码如下所示。每次TreeView更改时都会调用它。 Image被缓存在Map("图标")中。因此,每次都会创建一个新的ImageView

public final ImageView getImage(final String imageConstant) {
    final Image img;
    if (icons.containsKey(imageConstant)) {
        img = icons.get(imageConstant);
    }
    else {
        if (isRunFromJAR) {
           img = new Image("/path/" + imageConstant, iconSizeWidth,
                    iconSizeHeight, false, false);
        }
        else {
            img = new Image(getClass().getResourceAsStream(imageConstant), iconSizeWidth,
                    iconSizeHeight, false, false);
        }
        icons.put(imageConstant, img);
    }
    return new ImageView(img);

updateItem的{​​{1}}方法中,上面返回的TreeCell存储在名为ImageView的字段中。该字段在以下代码中使用,也来自icon

updateItem

但由于某种原因,gif中出现的问题出现了。

更新

实际上,ImageViews是在内部缓存的,这导致了重复数据删除。使用多个ImageView是解决方案。

1 个答案:

答案 0 :(得分:4)

  

上面返回的ImageView存储在名为icon的字段中。该字段用于以下代码...

ImageView 是Node的类型。节点一次只能有一个父! 因此,不要存储/缓存ImageView(-Node)。创建新的ImageView节点。

编辑:
正如James_D的评论所指出的那样:

  

...您可以为每个ImageView使用相同的图像( - 对象)......