JavaFX - 如何为特定的 TreeItem 设置 CellFactory
JavaFX - how to set CellFactory for specific TreeItem
我有一个 TreeView,有很多 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 执行此操作?
有什么帮助吗?
我想您是说您希望某些单元格可编辑,而某些单元格不可编辑,具体取决于它们显示的 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 ;
});
我有一个 TreeView,有很多 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 执行此操作?
有什么帮助吗?
我想您是说您希望某些单元格可编辑,而某些单元格不可编辑,具体取决于它们显示的 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 ;
});