Search code examples
javafxtreeviewjava-8getselection

How to get all selected tree items in a tree view in JavaFX


I need to be able to get an updated list of all selected items in a tree view (which has multiple selection on).

This example: Tree item select event in javafx2

shows how to respond/identify one selected item at a time. Is there a way to get all selected items at once? Something like the hypothetical non-working code below:

ArrayList<TreeItem> selectedTreeItems = new ArrayList<>();

myTreeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
        @Override
        public void changed(ObservableValue observable, Object oldValue, Object newValue) {
            selectedTreeItems.clear();//reset the list. correct?

            //get a new list of children of the root
            ObservableList objects = myTreeView.getRoot().getChildren();

            //loop to get the selected items.
            for (int i = 0; i < objects.size(); i++) {
                TreeItem object = (TreeItem) objects.get(i);
                if (thisObjectIsSelected(object)) {
                    selectedTreeItems.add(object);
                }
            }


        }
    });

    privatevoid thisObjectIsSelected(TreeItem item){
    //what do I do here?
    }

I am not sure how to achieve what I want. Any help is greatly appreciated!


Solution

  • Just observe and refer to the selection model's getSelectedItems() list:

    myTreeView.getSelectionModel().getSelectedItems().addListener(new ListChangeListener<TreeItem>() {
        @Override
        public void onChanged(Change<? extends TreeItem> change) {
            // myTreeView.getSelectionModel().getSelectedItems() contains all the selected items
        }
    });