Step to produce the bug
- Run this code
- Expand the root node, if not expanded
- Collapse the root node
- More folders (like subfolders) will appear at the end of the window
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.util.Callback;
public class Main extends Application {
    Pane box;
    TreeView<String> treeView;
    @Override
    public void start(Stage stage) {
        TreeItem<String> root = new TreeItem<>("Root");
        traverse("a folder path", root);
        root.setExpanded(true);
        treeView = new TreeView<String>(root);
        treeView.setShowRoot(true);
        treeView.setEditable(true);
        treeView.setPrefSize(500, 800);
        treeView.setCellFactory(new Callback<TreeView<String>, TreeCell<String>>() {
            @Override
            public TreeCell<String> call(TreeView<String> paramP) {
                return new TreeCell<String>() {
                    @Override
                    protected void updateItem(String paramT, boolean paramBoolean) {
                        super.updateItem(paramT, paramBoolean);
                        if (!isEmpty()) {
                            setGraphic(new Label(paramT, (Node) importImage("image path")));
                            setOnMouseClicked(new EventHandler<MouseEvent>() {
                                @Override
                                public void handle(MouseEvent event) {
                                    P.print(paramT);
                                    P.print(treeView.getChildrenUnmodifiable().size());
                                }
                            });
                        }
                    }
                };
            }
        });
        box = new Pane();
        box.getChildren().add(treeView);
        box.setPrefSize(500, 800);
        Scene scene = new Scene(box, 500, 800);
        stage.setTitle("Tree View Sample");
        stage.setScene(scene);
        stage.show();
    }
    public void traverse(String path, TreeItem<String> root) {
        File file = new File(path);
        if (!file.isDirectory() || !Files.isReadable(Paths.get(path)))
            return;
        Arrays.asList(file.listFiles()).forEach(e -> {
            TreeItem<String> temp = new TreeItem<>(e.getName());
            root.getChildren().add(temp);
            traverse(e.getPath(), temp);
        });
    }
    public static ImageView importImage(String path) {
        ImageView image = new ImageView(new Image(path));
        image.setPreserveRatio(true);
        image.setFitHeight(20);
        return image;
    }
    public static void main(String[] args) {
        launch(args);
    }
}
 
    