我有一个TreeView,有很多TreeItem。我想要做的是我启用对所选TreeItem的修改并为其他TreeItem禁用它。 为了使所有TreeView可以修改,我使用:
syTree.setEditable(true);
syTree.setCellFactory(TextFieldTreeCell.forTreeView());
}
syTree.setOnEditCommit(new EventHandler<TreeView.EditEvent<String>>() {
@Override
public void handle(TreeView.EditEvent<String> t) {
syTree.getRoot().getChildren().set(syTree.getRow(t.getTreeItem()), new TreeItem<String>(t.getNewValue()));
System.out.println("setOnEditCommit");
//}
}
});
syTree.setOnEditCancel(new EventHandler<TreeView.EditEvent<String>>() {
@Override
public void handle(TreeView.EditEvent<String> t) {
System.out.println("setOnEditCancel");
}
});
这行只是在尝试修改时将所有TreeItems更改为TextField:
syTree.setCellFactory(TextFieldTreeCell.forTreeView());
如何为特定的TreeItem做到这一点?
有什么帮助吗?
答案 0 :(得分:3)
我认为你说你想要一些单元格可以编辑,有些单元格不可编辑,这取决于它们显示的TreeItem
上的某些条件。如果是这样,那么你可能需要在你的细胞工厂做更多的工作:
Callback<TreeView<String>, TreeCell<String>> defaultCellFactory = TextFieldTreeCell.forTreeView();
syTree.setCellFactory((TreeView<String> tv) -> {
TreeCell<String> cell = defaultCellFactory.call(tv);
cell.treeItemProperty().addListener((obs, oldTreeItem, newTreeItem) -> {
if (newTreeItem == null) {
cell.setEditable(false);
} else if ( /* newTreeItem should be editable */) {
cell.setEditable(true);
} else {
cell.setEditable(false);
}
});
return cell ;
});