Javafx 表视图清除不清除视图

Javafx 表视图清除不清除视图,javafx,javafx-8,javafx-2,Javafx,Javafx 8,Javafx 2,我有一个如下定义的表视图 @FXML private TableView<ModelFieldTableEntry> modelFieldsTable; 但我看到了奇怪的行为,因为假设我单击了一个项目,它有4行 现在,当我单击另一项并尝试重新加载表时,它看起来如下所示。这是非常奇怪的,因为应该只有一行,但行的大小与上一次单击相同,除图标外,其余的行都是空的。当我点击图标时,什么也没发生。以前有人遇到过这样的情况。有人知道这是什么原因吗 我的工具如下所示。它们只是2个表列 fie

我有一个如下定义的表视图

@FXML
private TableView<ModelFieldTableEntry> modelFieldsTable;
但我看到了奇怪的行为,因为假设我单击了一个项目,它有4行

现在,当我单击另一项并尝试重新加载表时,它看起来如下所示。这是非常奇怪的,因为应该只有一行,但行的大小与上一次单击相同,除图标外,其余的行都是空的。当我点击图标时,什么也没发生。以前有人遇到过这样的情况。有人知道这是什么原因吗

我的工具如下所示。它们只是2个
表列

 fieldEditColumn.setCellValueFactory(cellData -> cellData.getValue().editToolProperty());
 fieldEditColumn.setCellFactory(p -> new ColumnEditCell(......));
 fieldDeleteColumn.setCellFactory(p -> new ColumnDeleteCell(.....));
 fieldDeleteColumn.setCellValueFactory(cellData -> cellData.getValue().deleteProperty());

public class ColumnEditCell extends TableCell<ModelFieldTableEntry, Boolean> {

    private Button cellButton;

    public ColumnEditCell(....) {
        .....
        initializeHandleEvent();
    }

    private void initializeHandleEvent() {
        cellButton = new Button();
        cellButton.setGraphic(IconUtils.createIcon(FontAwesomeIcon.EDIT));

        cellButton.setOnAction(t -> {
            .....
        });
    }

    @Override
    protected void updateItem(final Boolean t, final boolean empty) {
        super.updateItem(t, empty);
        if (!empty) {
            setItem(t);
            setGraphic(cellButton);
        }
    }
}
fieldEditColumn.setCellValueFactory(cellData->cellData.getValue().editToolProperty());
fieldEditColumn.setCellFactory(p->new ColumnEditCell(…);
fieldDeleteColumn.setCellFactory(p->new ColumnDeleteCell(…);
fieldDeleteColumn.setCellValueFactory(cellData->cellData.getValue().deleteProperty());
公共类ColumnEditCell扩展了TableCell{
私人按钮;
公共ColumnEditCell(…){
.....
初始化handleevent();
}
private void initializeHandleEvent(){
cellButton=新按钮();
cellButton.setGraphic(IconUtils.createIcon(FontAwesomeIcon.EDIT));
cellButton.setOnAction(t->{
.....
});
}
@凌驾
受保护的void updateItem(最终布尔值t,最终布尔值为空){
super.updateItem(t,空);
如果(!空){
设定项(t);
设置图形(cellButton);
}
}
}

如果单元格变空,您需要“撤消”更改。您没有这样做,这会导致单元格已填充,但稍后变为空,从而保持不变。在这种情况下,您需要将以下更改应用于
ColumnEditCell.updateItem

@Override
protected void updateItem(final Boolean t, final boolean empty) {
    super.updateItem(t, empty);
    if (empty) {
        setGraphic(null); // remove graphic
    } else {
        // setItem(t); //already done by super.updateItem
        setGraphic(cellButton);
    }
}
@Override
protected void updateItem(final Boolean t, final boolean empty) {
    super.updateItem(t, empty);
    if (empty) {
        setGraphic(null); // remove graphic
    } else {
        // setItem(t); //already done by super.updateItem
        setGraphic(cellButton);
    }
}