を取得します:
ObservableSet<CheckBoxTreeItem<?>> checkedItems = FXCollections.observableHashSet();
findCheckedItems((CheckBoxTreeItem<?>) tree.getRoot(), checkedItems);
// ...
private void findCheckedItems(CheckBoxTreeItem<?> item, ObservableSet<CheckBoxTreeItem<?>> checkedItems) {
if (item.isSelected()) {
checkedItems.add(item);
}
for (TreeItem<?> child : item.getChildren()) {
findCheckedItems((CheckBoxTreeItem<?>) child, checkedItems);
}
}
あなたはそれは計算法外であるため、非常に大きな木を、持っている場合は、チェックされた項目のセットを維持することができ、各項目のselectedProperty
を観察することによって、常に更新されたセットを維持します。今
private ObservableSet<CheckBoxTreeItem<?>> checkedItems = FXCollections.observableHashSet();
private <T> CheckBoxTreeItem<T> createTreeItem(T value) {
CheckBoxTreeItem<T> item = new CheckBoxTreeItem<>(value);
item.selectedProperty().addListener((obs, wasChecked, isNowChecked) -> {
if (isNowChecked) {
checkedItems.add(item);
} else {
checkedItems.remove(item);
}
});
return item ;
}
限り、あなたのアイテムがcreateTreeItem()
方法を介して作成されているとして、checkedItems
セットが常に含まれます:ここでの欠点は、あなたがそれをセットを更新するように常にCheckBoxTreeItem
を作成するために警戒しなければならないことですチェック項目。
ツリーが動的な場合(実行時にノードを追加したり削除した場合)、項目がツリーから削除されている場合はリスナーの登録を解除してください(リーダーの練習として残しておきます)。
ありがとうございます! – luckymanStefan