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);
}
}
我有一个 table 视图定义如下
@FXML
private TableView<ModelFieldTableEntry> modelFieldsTable;
当用户单击时,我会重新加载 table 以及所单击项目的详细信息。在我重新加载之前,我在 table 项
上调用 clearmodelFieldsTable.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);
}
}