private void updateSelectedFiles() { assertFxApplicationThread(); if (updatingSelectedFiles) return; updatingSelectedFiles = true; try { final ObservableList<TreeItem<FileTreeItem<?>>> selectedItems = treeTableView.getSelectionModel().getSelectedItems(); final Set<File> newSelectedFiles = new HashSet<File>(selectedItems.size()); for (final TreeItem<FileTreeItem<?>> selectedItem : selectedItems) { final FileTreeItem<?> fileTreeItem = selectedItem == null ? null : selectedItem.getValue(); // strange but true: it can be null if (fileTreeItem instanceof FileFileTreeItem) newSelectedFiles.add(((FileFileTreeItem) fileTreeItem).getFile()); } selectedFiles.retainAll(newSelectedFiles); selectedFiles.addAll(newSelectedFiles); } finally { updatingSelectedFiles = false; } }