import java.util.Arrays;

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.collections.ListChangeListener;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class TreeViewSelectedItemsBindingTest extends Application { 

	public class Item extends TreeItem<Integer> { 
		public Item(Integer... value) { 
			Arrays.stream(value).forEach(v -> getChildren().add(new TreeItem<Integer>(v))); 
		} 
	} 

	@Override 
	public void start(Stage primaryStage) throws Exception { 

		TreeView<Integer> treeView = new TreeView<>(); 
		treeView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); 
		treeView.setRoot(new Item(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)); 
		treeView.getRoot().setExpanded(true); 
		treeView.setShowRoot(false); 

		ListView<TreeItem<Integer>> listView = new ListView<>(); 

		Bindings.bindContent(listView.getItems(), treeView.getSelectionModel().getSelectedItems()); 

		treeView.getSelectionModel().getSelectedItems() 
		.addListener((ListChangeListener<? super TreeItem<Integer>>) change -> { 
			System.out.println("Change: " + change); 
			System.out.println("TreeView size: " + treeView.getSelectionModel().getSelectedItems().size()); 
			System.out.println("ListView size: " + listView.getItems().size()); 
			System.out.println("-------------------"); 
		}); 

		HBox box = new HBox(); 
		box.getChildren().addAll(treeView, listView); 
		primaryStage.setScene(new Scene(box)); 
		primaryStage.show(); 
	} 

	static public void main(String[] args) { 
		launch(args); 
	} 
} 
