/** * @param root * The "checked" state of all the descendants, including the root * itself, will be monitored */ public CheckedTreeItemCollector(CheckBoxTreeItem<T> root) { this.root = root; root.addEventHandler(TreeModificationEvent.ANY, event -> { @SuppressWarnings("unchecked") TreeModificationEvent<T> mod = (TreeModificationEvent<T>) event; T value = mod.getTreeItem().getValue(); boolean checked = mod.getTreeItem().isSelected(); synchronized (this.checkedItems) { if (checked && !this.checkedItems.contains(value)) { this.checkedItems.add(value); } else if (!checked && this.checkedItems.contains(value)) { this.checkedItems.remove(value); } } }); this.checkedItems.addListener((SetChangeListener<T>) change -> { if (change.getElementAdded() != null) { setCheckedStateForValue(root, change.getElementAdded(), true); } if (change.getElementRemoved() != null) { setCheckedStateForValue(root, change.getElementRemoved(), false); } }); }
/** * @param root * The "checked" state of all the descendants, including the root * itself, will be monitored */ public CheckedTreeItemCollector(CheckBoxTreeItem<T> root) { this.root = root; root.addEventHandler(TreeModificationEvent.ANY, event -> { @SuppressWarnings("unchecked") TreeModificationEvent<T> mod = (TreeModificationEvent<T>) event; T value = mod.getTreeItem().getValue(); boolean checked = mod.getTreeItem().isSelected(); synchronized (this.checkedItems) { if (checked && !this.checkedItems.contains(value)) { this.checkedItems.add(value); } else if (!checked && this.checkedItems.contains(value)) { this.checkedItems.remove(value); } } }); this.checkedItems.addListener((SetChangeListener<T>) change -> { if (change.getElementAdded() != null) { setCheckedStateForValue(root, change.getElementAdded(), true); } if (change.getElementRemoved() != null) { setCheckedStateForValue(root, change.getElementRemoved(), false); } }); }
/*********************************************************************** * * * Constructors * * * **********************************************************************/ CheckTreeViewCheckModel(final CheckTreeView<T> treeView) { this.treeView = treeView; this.root = treeView.getRoot(); this.root.addEventHandler(CheckBoxTreeItem.<T>checkBoxSelectionChangedEvent(), e -> { CheckBoxTreeItem<T> treeItem = e.getTreeItem(); if (treeItem.isSelected()) { // && ! treeItem.isIndeterminate()) { check(treeItem); } else { clearCheck(treeItem); } }); // we should reset the check model and then update the checked items // based on the currently checked items in the tree view clearChecks(); for (int i = 0; i < treeView.getExpandedItemCount(); i++) { CheckBoxTreeItem<T> treeItem = (CheckBoxTreeItem<T>) treeView.getTreeItem(i); if (treeItem.isSelected() && ! treeItem.isIndeterminate()) { check(treeItem); } } }