在我的JavaFX应用程序中,我使用TreeView。单个TreeItems包含一个图像。不幸的是,图像只显示一次。
加载图像的代码如下所示。每次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是解决方案。
答案 0 :(得分:4)
上面返回的ImageView存储在名为icon的字段中。该字段用于以下代码...
ImageView 是Node的类型。节点一次只能有一个父! 因此,不要存储/缓存ImageView(-Node)。创建新的ImageView节点。
编辑:
正如James_D的评论所指出的那样:
...您可以为每个ImageView使用相同的图像( - 对象)......