spilot
spilot

Reputation: 635

JavaFX: ImageView shows Image only once

In my JavaFX application I use a TreeView. The single TreeItems contain an image. Unfortunately, the image is shown only once.

a gif showing the problem

The code for loading the image looks like the following. It is called every time the TreeView changes. The Images are cached in a Map ("icons"). Thus, a new ImageView is created every time.

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);

In the updateItem method of my TreeCells, the ImageView returned above is stored into a field called icon. The field is used in the following code, also from updateItem:

if (icon == null) {
        setGraphic(label);
    }
    else {
        final HBox hbox = new HBox(ICON_SPACING);
        final Label iconLabel = new Label("", icon);
        hbox.getChildren().addAll(iconLabel, label);
        setGraphic(hbox);
    }

But for some reason, the problem shown in the gif occurs.

Update

Actually, the ImageViews were cached internally, which led to de-duplication. Using multiple ImageViews is the solution.

Upvotes: 2

Views: 726

Answers (1)

Ben
Ben

Reputation: 3518

the ImageView returned above is stored into a field called icon.The field is used in the following code...

The ImageView is type of Node. A Node can only have one parent at a time!
So don't store/cache a ImageView(-Node). Create new ImageView-Nodes.

Edit:
As pointed out in the comments by James_D:

...you can use the same Image(-Object) for every ImageView...

Upvotes: 5

Related Questions