@@ -6831,4 +6831,87 @@ public void test_ChangeToStringMouseMultipleSelectionCellMode() {
6831
6831
Thread .currentThread ().setUncaughtExceptionHandler (exceptionHandler );
6832
6832
}
6833
6833
6834
+ // JDK-8286261
6835
+ @ Test
6836
+ public void testAddTreeItemToCollapsedAncestorKeepsSelectedItem () {
6837
+ TreeItem <String > rootNode = new TreeItem <>("Root" );
6838
+ rootNode .setExpanded (true );
6839
+ TreeItem <String > level1 = new TreeItem <>("Node 0" );
6840
+ level1 .setExpanded (false );
6841
+ TreeItem <String > level2 = new TreeItem <>("Node 1" );
6842
+ level2 .getChildren ().add (new TreeItem <>("Node 2" ));
6843
+ level2 .setExpanded (true );
6844
+
6845
+ rootNode .getChildren ().add (level1 );
6846
+ rootNode .getChildren ().add (new TreeItem <>("Node 3" ));
6847
+
6848
+ level1 .getChildren ().add (level2 );
6849
+
6850
+ TreeTableColumn <String , String > column = new TreeTableColumn <>("Nodes" );
6851
+ column .setCellValueFactory (p -> new ReadOnlyStringWrapper (p .getValue ().getValue ()));
6852
+ column .setPrefWidth (200 );
6853
+
6854
+ TreeTableView <String > table = new TreeTableView <>(rootNode );
6855
+ table .setShowRoot (false );
6856
+ table .getColumns ().add (column );
6857
+ table .getSelectionModel ().setSelectionMode (SelectionMode .MULTIPLE );
6858
+
6859
+ table .getSelectionModel ().select (level1 );
6860
+ assertEquals (0 , table .getSelectionModel ().getSelectedIndex ());
6861
+ assertEquals ("Node 0" , table .getSelectionModel ().getSelectedItem ().getValue ());
6862
+ assertEquals (0 , table .getFocusModel ().getFocusedIndex ());
6863
+ assertEquals ("Node 0" , table .getFocusModel ().getFocusedItem ().getValue ());
6864
+
6865
+ // add new node at level 3, that has a collapsed ancestor
6866
+ level2 .getChildren ().add (new TreeItem <>("Node 4" ));
6867
+
6868
+ // selection and focus remain at level1
6869
+ assertEquals (0 , table .getSelectionModel ().getSelectedIndex ());
6870
+ assertEquals ("Node 0" , table .getSelectionModel ().getSelectedItem ().getValue ());
6871
+ assertEquals (0 , table .getFocusModel ().getFocusedIndex ());
6872
+ assertEquals ("Node 0" , table .getFocusModel ().getFocusedItem ().getValue ());
6873
+ }
6874
+
6875
+ // JDK-8286261
6876
+ @ Test
6877
+ public void testRemoveTreeItemFromCollapsedAncestorKeepsSelectedItem () {
6878
+ TreeItem <String > rootNode = new TreeItem <>("Root" );
6879
+ rootNode .setExpanded (true );
6880
+ TreeItem <String > level1 = new TreeItem <>("Node 0" );
6881
+ level1 .setExpanded (false );
6882
+ TreeItem <String > level2 = new TreeItem <>("Node 1" );
6883
+ level2 .getChildren ().add (new TreeItem <>("Node 2" ));
6884
+ level2 .getChildren ().add (new TreeItem <>("Node 3" ));
6885
+
6886
+ level2 .setExpanded (true );
6887
+
6888
+ rootNode .getChildren ().add (level1 );
6889
+ rootNode .getChildren ().add (new TreeItem <>("Node 4" ));
6890
+
6891
+ level1 .getChildren ().add (level2 );
6892
+
6893
+ TreeTableColumn <String , String > column = new TreeTableColumn <>("Nodes" );
6894
+ column .setCellValueFactory (p -> new ReadOnlyStringWrapper (p .getValue ().getValue ()));
6895
+ column .setPrefWidth (200 );
6896
+
6897
+ TreeTableView <String > table = new TreeTableView <>(rootNode );
6898
+ table .setShowRoot (false );
6899
+ table .getColumns ().add (column );
6900
+ table .getSelectionModel ().setSelectionMode (SelectionMode .MULTIPLE );
6901
+
6902
+ table .getSelectionModel ().select (level1 );
6903
+ assertEquals (0 , table .getSelectionModel ().getSelectedIndex ());
6904
+ assertEquals ("Node 0" , table .getSelectionModel ().getSelectedItem ().getValue ());
6905
+ assertEquals (0 , table .getFocusModel ().getFocusedIndex ());
6906
+ assertEquals ("Node 0" , table .getFocusModel ().getFocusedItem ().getValue ());
6907
+
6908
+ // remove Node 2 at level 3, that has a collapsed ancestor
6909
+ level2 .getChildren ().remove (0 );
6910
+
6911
+ // selection and focus remain at level1
6912
+ assertEquals (0 , table .getSelectionModel ().getSelectedIndex ());
6913
+ assertEquals ("Node 0" , table .getSelectionModel ().getSelectedItem ().getValue ());
6914
+ assertEquals (0 , table .getFocusModel ().getFocusedIndex ());
6915
+ assertEquals ("Node 0" , table .getFocusModel ().getFocusedItem ().getValue ());
6916
+ }
6834
6917
}
0 commit comments