我正在使用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();
现在我需要这样的东西用于未经检查的项目
答案 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("============================================");
}
}
});
资源:
答案 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)。