JavaFx CheckTreeView如何检查哪个项目未选中?

时间:2017-07-28 06:37:57

标签: java checkbox javafx treeview controlsfx

我正在使用ControlsFX for CheckTreeView。我在CheckTreeView中有很多元素,我不想遍历这个树中的所有元素(因为树中的元素数量需要很多时间)。是否有类似checkTreeView.getLastUncheckedItem();的方法来获取最后一个未选中的方法。

目前我正在检查检查的元素数量并将其与计数器进行比较。

    If (CountPrev > Count){
//Something Unchecked Do Stuff
}

但是,再一次,我无法在没有遍历所有元素的情况下找到未经检查的内容。

修改

当用户检查CheckTreeView上的项目时,我通过

获取该项目
String lastCheckedItem = checkTreeView.getCheckModel().
getCheckedItems().get(treeView.getCheckModel().getCheckedItems().size()-1).toString();

现在我需要这样的东西用于未经检查的项目

3 个答案:

答案 0 :(得分:1)

采用ArrayList' allItem '然后存储所有TreeItems           在ObservableList' Selecteditems '中存储所选项目之后运用           getCheckedItems()方法,现在删除ArrayList中的选定项目           下面的代码:

此处 allTreeItems 是CheckBoxTreeItem

List<String> allItem = new ArrayList<>();
for (int j = 0; j < allTreeItems.getValue().length(); j++) {
         allItem.add(allTreeItems.getChildren().get(j).getValue());
    }

if (CountPrev > Count) {
        ObservableList<TreeItem<String>> Selecteditems = checkTreeView.getCheckModel().getCheckedItems();
        allItem.remove(Selecteditems);

        System.out.println("UnChecked Item :" + allItem);

        for (int k = 0; k < allItem.size(); k++) {
            System.out.println(allItem.get(k));
        }
}

答案 1 :(得分:1)

伙计们非常感谢你的帮助! 我接受了Calips的回答,因为他为我的问题付出了时间和精力。 这就是我一直在寻找的:

   checkTreeView.getCheckModel().getCheckedItems().addListener(new ListChangeListener<TreeItem<String>>() {
        @Override public void onChanged(ListChangeListener.Change<? extends TreeItem<String>> change) {
            updateText(checkedItemsLabel, change.getList());

            while (change.next()) {
                System.out.println("============================================");
                System.out.println("Change: " + change);
                System.out.println("Added sublist " + change.getAddedSubList());
                System.out.println("Removed sublist " + change.getRemoved());
                System.out.println("List " + change.getList());
                System.out.println("Added " + change.wasAdded() + " Permutated " + change.wasPermutated() + " Removed " + change.wasRemoved() + " Replaced "
                        + change.wasReplaced() + " Updated " + change.wasUpdated());
                System.out.println("============================================");
            }
        }
    });

资源:

https://github.com/jinghai/controlsfx/blob/master/controlsfx-samples/src/main/java/org/controlsfx/samples/checked/HelloCheckTreeView.java

答案 2 :(得分:0)

Stack<YourClassOfTheCheckModel> recentlyUnchcked = new Stack<YourClassOfTheCheckModel>();
yourTreeView.getSelectionModel().
selectedItemProperty().addListener( new ChangeListener() {

        @Override
        public void changed(ObservableValue observable, Object oldValue,
                Object newValue) {

            TreeItem<YourClassOfTheCheckModel> selectedItem = 
               (TreeItem<YourClassOfTheCheckModel>) newValue;
           CheckModel checkModel = checkTreeView.getCheckModel().
           bool checked = checkModel.isChecked (selectedItem);
           if(checked==false){
                recentlyUnchcked.push(yourObjectOfTheCheckModel);
           }
        }

      }); 

希望这会有所帮助或给你一个想法,虽然我不知道这是否可行(代码未测试,现在没有IDE)。