diff --git a/modules/javafx.controls/src/main/java/javafx/scene/control/TreeTableView.java b/modules/javafx.controls/src/main/java/javafx/scene/control/TreeTableView.java index 89d532faa0..cacb6c7c70 100644 --- a/modules/javafx.controls/src/main/java/javafx/scene/control/TreeTableView.java +++ b/modules/javafx.controls/src/main/java/javafx/scene/control/TreeTableView.java @@ -582,11 +582,13 @@ public static int getNodeLevel(TreeItem node) { @Override public Boolean call(TreeTableView table) { try { TreeItem rootItem = table.getRoot(); - if (rootItem == null || rootItem.getChildren().isEmpty()) return false; + if (rootItem == null) return false; TreeSortMode sortMode = table.getSortMode(); if (sortMode == null) return false; + if (rootItem.getChildren().isEmpty()) return true; + rootItem.lastSortMode = sortMode; rootItem.lastComparator = table.getComparator(); rootItem.sort(); diff --git a/modules/javafx.controls/src/test/java/test/javafx/scene/control/TreeTableViewTest.java b/modules/javafx.controls/src/test/java/test/javafx/scene/control/TreeTableViewTest.java index 9b6d7f9bc0..159e0d2a11 100644 --- a/modules/javafx.controls/src/test/java/test/javafx/scene/control/TreeTableViewTest.java +++ b/modules/javafx.controls/src/test/java/test/javafx/scene/control/TreeTableViewTest.java @@ -786,6 +786,18 @@ private void verifySelectionAfterPermutation() { }); } + @Test public void testSetSortOrderRetainsWhenRootHasNoChildren() { + TreeTableView ttv = new TreeTableView<>(); + TreeItem root = new TreeItem<>("root"); + root.setExpanded(true); + ttv.setRoot(root); + assertEquals(0, ttv.getSortOrder().size()); + + TreeTableColumn ttc = new TreeTableColumn<>("Column"); + ttv.getSortOrder().add(ttc); + assertEquals(1, ttv.getSortOrder().size()); + } + @Test public void testNPEWhenRootItemIsNull() { TreeTableView ttv = new TreeTableView<>(); ControlTestUtils.runWithExceptionHandler(() -> {