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(); 
} 
} 