JDK-8166956 : JavaFX TreeTableView slow scroll performance
  • Type: Bug
  • Component: javafx
  • Sub-Component: controls
  • Affected Version: 8,9
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: generic
  • CPU: generic
  • Submitted: 2016-09-23
  • Updated: 2020-09-08
  • Resolved: 2020-09-08
Related Reports
Duplicate :  
Relates :  
Relates :  
Relates :  
Description
FULL PRODUCT VERSION :
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

ADDITIONAL OS VERSION INFORMATION :
OS X El Capitan 10.11.6

A DESCRIPTION OF THE PROBLEM :
TreeTableView seems to suffer from very slow scroll performance.
In my test program I create 8000 TreeItems. When you try and scroll, the scroll bar lags behind the mouse almost as if it's attached by a rubber band.

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the attached example and scroll.

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Scroll bar should follow closely the movement of the mouse.
ACTUAL -
Scroll bar lags the mouse almost as if its attached by a rubber band.

REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
import java.util.Random;

import javafx.application.Application;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableColumn.CellDataFeatures;
import javafx.scene.control.TreeTableView;
import javafx.stage.Stage;

public class SlowTreeTableViewScroll extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override public void start(Stage stage) {
        TreeItem<String> root = new TreeItem<>("Root");
        TreeTableView<String> treeTableView = new TreeTableView<>(root);
        treeTableView.setFixedCellSize(24);
        treeTableView.setPrefWidth(800);
        treeTableView.setPrefHeight(500);

        Scene scene = new Scene(treeTableView);
        stage.setTitle("Tree Table View Sample");
        stage.setWidth(800);
        stage.setHeight(500);

        for (int i=0 ; i < 100; ++i) {
            TreeItem<String> child = addNodes(root);
            child = addNodes(child);
            child = addNodes(child);
            child = addNodes(child);
        }

        TreeTableColumn<String, String> column = new TreeTableColumn<>("Column");
        column.setPrefWidth(150);
        column.setCellValueFactory((CellDataFeatures<String, String> p) -> new ReadOnlyStringWrapper(p.getValue().getValue()));
        treeTableView.getColumns().add(column);

        final Random rand = new Random();
        for (int i=0 ; i < 100; ++i)  {
            TreeTableColumn<String, String> col = new TreeTableColumn<>(Integer.toString(i));
            col.setPrefWidth(25);
            col.setCellValueFactory(val -> new ReadOnlyStringWrapper(Integer.toString(rand.nextInt(100))));
            treeTableView.getColumns().add(col);
        }

        stage.setScene(scene);
        stage.show();
    }

    private TreeItem<String> addNodes(final TreeItem<String> parent) {
        parent.setExpanded(true);
        TreeItem<String> root = new TreeItem<>("dir");
        root.setExpanded(true);

        parent.getChildren().add(root);

        for (int i = 0; i < 20; ++i) {
            TreeItem<String> childNode = new TreeItem<>("Node " + Integer.toString(i));
            root.getChildren().add(childNode);
        }
        return root;
    }
} 
---------- END SOURCE ----------


Comments
Closed as a duplicate of JDK-8185886, which will in turn be split into 4 separate issues.
08-09-2020

Scroll performance can be improved in JDK 9+ once this is merged: JDK-8185887
04-09-2017

Verified with JDK 9-ea+181 and behavior is same like in earlier JDK versions (8 GA, 8u121, 8u151) for windows 7 , Windows 10, macOS Sierra 10.12.3.
04-09-2017

Checked this issue against 8,8u102,8u112ea,9ea on Windows and could confirm the issue as reported by the submitter. Steps to reproduce: ************************* - Run and scroll the attached test program(SlowTreeTableViewScroll.java) with JDK Result: ********* OS : Windows 7 64 bit [Microsoft Windows [Version 6.1.7601]] JDK: ++++ 8 b132 : Fail 8u102 b14 : Fail 8u112ea b04 : Fail 9ea b133 : Fail ====================================================================================================================================
30-09-2016