Это не имеет ничего общего с методом delete
или remove
.Это связано с тем, что вы сделали в TableColumn.setCellFactory()
.
Чтобы получить показанный вами флажок, вы должны были использовать (в общем) один из двух методов:
Переопределение updateItem ()в TableCell при настройке Cell Factory
В updateItem()
есть параметр empty
, который указывает, является ли строка пустой или нет.Вы должны использовать это, чтобы определить, когда не показывать флажок.
column.setCellFactory(col -> {
return new TableCell<Foo, Boolean>() {
final CheckBox checkBox = new CheckBox();
@Override
public void updateItem(final Boolean selected, final boolean empty) {
super.updateItem(selected, empty);
if (!this.isEmpty()) {
setGraphic(checkBox);
setText("");
}
else {
setGraphic(null); // Remove checkbox if row is empty
setText("");
}
}
}
}
Использование CheckBoxTableCell
JavaFX API имеет этот удобный класс CheckBoxTableCell
, который сделает все это за вас.Большинству людей трудно использовать этот класс, потому что есть две вещи, которые необходимо обеспечить для правильного его использования:
-
TableView
, к которому относится столбец, должен быть редактируемым. - Сам
TableColumn
должен быть редактируемым.
Пример:
tableView.setEditable(true);
tableColumnSelected.setCellFactory(CheckBoxTableCell.forTableColumn(tableColumnSelected));
tableColumnSelected.setEditable(true);
Что касается того, какую запись вы хотите удалить с помощью кнопки удаления, вам просто нужно удалитьправильные предметы из TableView
.