gpt4 book ai didi

java - 自定义 CellFactory 添加新节点

转载 作者:行者123 更新时间:2023-12-02 11:31:55 25 4
gpt4 key购买 nike

我有一个奇怪的错误,我找不到合适的解决方案。我想向我的应用程序添加一个显示任务分类的 TreeTableView。由于用户可以自己添加任务,但这些任务必须与已经存在的任务区分开来,我希望它们在我的 TreeView 中为黄色。因此我添加了一个自定义 CellFactory:

public class TaskLibrary extends AnchorPane {
@FXML
private TreeTableColumn<Task,String> mainColumn;
@FXML
private TreeTableView<Task> taskTreeTableView;

public TaskLibrary(){
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("../layout/TaskLibrary.fxml"));
loader.setRoot(this);
loader.setController(this);
loader.load();
mainColumn.setCellValueFactory(param -> param.getValue().getValue().taskNameProperty());
mainColumn.setCellFactory(param -> new TreeTableCell<Task,String>(){
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
Task listObject = this.getTreeTableRow().getItem();
if (listObject != null) {
if (item == null || empty) {
setText("");
setStyle("");
} else {
if (listObject.getIsDummy()) {
setStyle("-fx-background-color: yellow");
}
setText(listObject.getTaskName());
}
}
}
});

}
catch (IOException e){
throw new RuntimeException(e);
}
}

@FXML
public void addNewTask(){
}
public void setColumnText(String text){
mainColumn.setText(text);
}

public void enableDragAndDrop(){
TaskTreeRowFactory fac = new TaskTreeRowFactory();
taskTreeTableView.setRowFactory(fac::internalMoveFactory);
}

public TreeTableColumn<Task, String> getMainColumn() {
return mainColumn;
}

public void setMainColumn(TreeTableColumn<Task, String> mainColumn) {
this.mainColumn = mainColumn;
}

public TreeTableView<Task> getTaskTreeTableView() {
return taskTreeTableView;
}

public void setTaskTreeTableView(TreeTableView<Task> taskTreeTableView) {
this.taskTreeTableView = taskTreeTableView;
}
}

现在有一个奇怪的错误,扩展 TreeView 中的最后一个节点会产生一个新节点:

enter image description here

有什么我错过的吗?

最佳答案

如果该行的项目不为 null,则只能操作该单元格。但是,如果该行变空,则单元格也变空,但 this.getTreeTableRow().getItem() 产生 null 并且您不会修改单元格以使其看起来为空。当单元格变空时,您需要始终清除text/style:

if (empty || item == null || listObject == null) {
setText("");
setStyle("");
} else {
setStyle(listObject.getIsDummy() ? "-fx-background-color: yellow" : "");
setText(listObject.getTaskName());
}

关于java - 自定义 CellFactory 添加新节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49233012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com