FULL PRODUCT VERSION :
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Windows 10 x64
A DESCRIPTION OF THE PROBLEM :
When using a TreeTableView with default selection model, the selection is not restored reliably after sorting. The bug maybe related toJDK-8169642.
REGRESSION. Last worked in version 8u112
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1) Execute the sample app (see sourcecode)
2) Select node "1" and switch the sort order by clicking the column header
-> The selection remains on node "1" -> OK
3) Select node "1.1" and switch the sort order by clicking the column header
-> The selection switches to "1.4" -> NOT OK
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I expect the same node to be selected before and after sorting.
ACTUAL -
The selection is not restored correctly for nodes with a depth greater than one.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableView;
import javafx.stage.Stage;
public class TreeTableViewSelectionRestoreAfterSortBug extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
final TreeItem<String> rootItem = new TreeItem<>("root");
final TreeItem<String> firstChild = new TreeItem<>("1");
firstChild.getChildren().add(new TreeItem<>("1.1"));
firstChild.getChildren().add(new TreeItem<>("1.2"));
firstChild.getChildren().add(new TreeItem<>("1.3"));
firstChild.getChildren().add(new TreeItem<>("1.4"));
final TreeItem<String> secondChild = new TreeItem<>("2");
secondChild.getChildren().add(new TreeItem<>("2.1"));
secondChild.getChildren().add(new TreeItem<>("2.2"));
secondChild.getChildren().add(new TreeItem<>("2.3"));
secondChild.getChildren().add(new TreeItem<>("2.4"));
rootItem.getChildren().addAll(firstChild, secondChild);
final TreeTableView<String> tree = new TreeTableView<>(rootItem);
final TreeTableColumn<String, String> column = new TreeTableColumn<>("first column");
column.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().getValue()));
tree.getColumns().add(column);
final Scene scene = new Scene(tree);
primaryStage.setScene(scene);
primaryStage.sizeToScene();
primaryStage.show();
}
}
---------- END SOURCE ----------
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Windows 10 x64
A DESCRIPTION OF THE PROBLEM :
When using a TreeTableView with default selection model, the selection is not restored reliably after sorting. The bug maybe related to
REGRESSION. Last worked in version 8u112
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1) Execute the sample app (see sourcecode)
2) Select node "1" and switch the sort order by clicking the column header
-> The selection remains on node "1" -> OK
3) Select node "1.1" and switch the sort order by clicking the column header
-> The selection switches to "1.4" -> NOT OK
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I expect the same node to be selected before and after sorting.
ACTUAL -
The selection is not restored correctly for nodes with a depth greater than one.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableView;
import javafx.stage.Stage;
public class TreeTableViewSelectionRestoreAfterSortBug extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
final TreeItem<String> rootItem = new TreeItem<>("root");
final TreeItem<String> firstChild = new TreeItem<>("1");
firstChild.getChildren().add(new TreeItem<>("1.1"));
firstChild.getChildren().add(new TreeItem<>("1.2"));
firstChild.getChildren().add(new TreeItem<>("1.3"));
firstChild.getChildren().add(new TreeItem<>("1.4"));
final TreeItem<String> secondChild = new TreeItem<>("2");
secondChild.getChildren().add(new TreeItem<>("2.1"));
secondChild.getChildren().add(new TreeItem<>("2.2"));
secondChild.getChildren().add(new TreeItem<>("2.3"));
secondChild.getChildren().add(new TreeItem<>("2.4"));
rootItem.getChildren().addAll(firstChild, secondChild);
final TreeTableView<String> tree = new TreeTableView<>(rootItem);
final TreeTableColumn<String, String> column = new TreeTableColumn<>("first column");
column.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().getValue()));
tree.getColumns().add(column);
final Scene scene = new Scene(tree);
primaryStage.setScene(scene);
primaryStage.sizeToScene();
primaryStage.show();
}
}
---------- END SOURCE ----------
- duplicates
-
JDK-8193800 TreeTableView selection changes on sorting
- Resolved
- relates to
-
JDK-8169642 IndexOutOfBoundsException when sorting TreeTableView with multi-selection enabled
- Resolved
-
JDK-8248217 ☂ TreeTableView selection issues
- Open