Table view clear 不要清除视图

Table view clear dont clear the view

我有一个 table 视图定义如下

@FXML
private TableView<ModelFieldTableEntry> modelFieldsTable;

当用户单击时,我会重新加载 table 以及所单击项目的详细信息。在我重新加载之前,我在 table 项

上调用 clear
modelFieldsTable.getItems().clear();

但是我看到了奇怪的行为,因为假设我单击了一个项目并且它有 4 行

现在,当我单击另一个项目并尝试重新加载 table 时,它看起来如下所示。这很奇怪,因为应该只有 1 行,但行的大小与上次单击时相同,其余行除了图标外都是空的。当我单击图标时,没有任何反应。以前有人遇到过这种情况。有人知道是什么原因造成的吗?

我的工具定义如下所示。他们只是 2 TableColumn

 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);
        }
    }
}

您需要 "undo" 更改以防单元格变空。您没有这样做,这会导致单元格被填充但后来变空以保持不变。在这种情况下,您需要对 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);
    }
}