2017-03-16 15 views
1

を取得するには JavaFxのCheckBox TreeViewの項目をチェックしますか? が、私はこれを達成する方法がわからない...あなただけの選択項目...あなたはCheckBoxTreeItem Sを使用している、あなたはツリーを反復処理し、それぞれのselectedプロパティをテストすることができますと仮定JavaFxでCheckBoxTreeViewのチェック項目を取得する方法

ObservableList<TreeItem<String>> items = treeHazardsXmi.getSelectionModel().getSelectedItems(); 

答えて

2

を取得します:

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を作成するために警戒しなければならないことですチェック項目。

ツリーが動的な場合(実行時にノードを追加したり削除した場合)、項目がツリーから削除されている場合はリスナーの登録を解除してください(リーダーの練習として残しておきます)。

+0

ありがとうございます! – luckymanStefan

関連する問題