diff --git a/modules/controls/src/main/java/javafx/scene/control/TreeItem.java b/modules/controls/src/main/java/javafx/scene/control/TreeItem.java --- a/modules/controls/src/main/java/javafx/scene/control/TreeItem.java +++ b/modules/controls/src/main/java/javafx/scene/control/TreeItem.java @@ -880,8 +880,8 @@ previousExpandedDescendentCount = expandedDescendentCount; expandedDescendentCount = 1; - if (!isLeaf() && isExpanded()) { - for (TreeItem child : getChildren()) { + if (!isLeaf() && isExpanded() && children != null) { + for (TreeItem child : children) { if (child == null) continue; expandedDescendentCount += child.isExpanded() ? child.getExpandedDescendentCount(reset) : 1; } diff --git a/modules/controls/src/test/java/javafx/scene/control/TreeTableViewTest.java b/modules/controls/src/test/java/javafx/scene/control/TreeTableViewTest.java --- a/modules/controls/src/test/java/javafx/scene/control/TreeTableViewTest.java +++ b/modules/controls/src/test/java/javafx/scene/control/TreeTableViewTest.java @@ -61,6 +61,7 @@ import javafx.scene.control.cell.*; import javafx.scene.image.ImageView; import javafx.scene.input.KeyCode; +import javafx.scene.layout.BorderPane; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; @@ -3770,4 +3771,34 @@ assertEquals(1, rt_37538_count); sl.dispose(); } + + @Test public void test_rt_37593() { + TreeItem root = new TreeItem<>(); + + TreeItem one = new TreeItem<>("one"); + root.getChildren().add(one); + + TreeItem two = new TreeItem<>("two"); + two.getChildren().add(new TreeItem<>("childOne")); + two.getChildren().add(new TreeItem<>("childTwo")); + root.getChildren().add(two); + + root.getChildren().add(new TreeItem<>("three")); + + TreeTableColumn nameColumn = new TreeTableColumn<>("name"); + nameColumn.setCellValueFactory(param -> new ReadOnlyObjectWrapper(param.getValue().getValue())); + nameColumn.setPrefWidth(200); + + TreeTableView table = new TreeTableView<>(); + table.setShowRoot(false); + table.setRoot(root); + table.getColumns().addAll(nameColumn); + + table.getSortOrder().add(nameColumn); + nameColumn.setSortType(TreeTableColumn.SortType.DESCENDING); + table.getSelectionModel().select(one); + two.setExpanded(true); + + VirtualFlowTestUtils.clickOnRow(table, 4); + } }