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