JavaFx CheckTreeView 如何检查未选中的项目?
JavaFx CheckTreeView how to check which item is unchecked?
我正在为 CheckTreeView 使用 ControlsFX。我在 CheckTreeView 中有很多元素,我不想遍历这棵树中的所有元素(因为树中元素的数量会花费很多时间)。有没有像checkTreeView.getLastUncheckedItem();
这样的方法来获取最后一个未选中的。
目前我正在检查检查的元素数量并与计数器进行比较。
If (CountPrev > Count){
//Something Unchecked Do Stuff
}
但同样,如果不遍历所有元素,我无法找到未选中的内容。
编辑:
当用户检查 CheckTreeView 上的项目时,我通过
获取该项目
String lastCheckedItem = checkTreeView.getCheckModel().
getCheckedItems().get(treeView.getCheckModel().getCheckedItems().size()-1).toString();
现在我需要这样的东西来处理未选中的项目
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)。
取一个 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));
}
}
伙计们,非常感谢你们的帮助!
我接受了卡利普斯的回答,因为他为我的问题付出了时间和精力。
这就是我一直在寻找的:
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("============================================");
}
}
});
资源:
我正在为 CheckTreeView 使用 ControlsFX。我在 CheckTreeView 中有很多元素,我不想遍历这棵树中的所有元素(因为树中元素的数量会花费很多时间)。有没有像checkTreeView.getLastUncheckedItem();
这样的方法来获取最后一个未选中的。
目前我正在检查检查的元素数量并与计数器进行比较。
If (CountPrev > Count){
//Something Unchecked Do Stuff
}
但同样,如果不遍历所有元素,我无法找到未选中的内容。
编辑:
当用户检查 CheckTreeView 上的项目时,我通过
获取该项目String lastCheckedItem = checkTreeView.getCheckModel().
getCheckedItems().get(treeView.getCheckModel().getCheckedItems().size()-1).toString();
现在我需要这样的东西来处理未选中的项目
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)。
取一个 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));
}
}
伙计们,非常感谢你们的帮助! 我接受了卡利普斯的回答,因为他为我的问题付出了时间和精力。 这就是我一直在寻找的:
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("============================================");
}
}
});
资源: