Мало инфы даёшь. Либо минимально воспроизводимый пример нужен, либо больше инфы по исключениям.
Проблему можно решить несколькими способами, но блин, я с телефона печатаю)).
Первый способ добавить проверку, что в таблице остался последний элемент:
if (table.getItems().size() == 1) {
table.getItems().removeAll(person);
}
table - это TableView
person - экземпляр коллекции.
Еще один способ через копию коллекции:
ArrayList<Person> copyTable = new ArrayList<>(table.getSelectionModel().getSelectedItems());
copyTable.forEach(s -> { table.getItems().remove(s); });
Есть ещё способы.
И проблема не с кнопкой, а с методом удаления.
В моем примере нет фильтра, но дело вероятно не в нём.
У меня всё отлично работает! Удаление правой кнопкой мыши. Второй вариант закоментирован.
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
public class TestTableView extends Application {
public static class TableData {
SimpleStringProperty one, two, three;
public TableData(String one, String two, String three) {
this.one = new SimpleStringProperty(one);
this.two = new SimpleStringProperty(two);
this.three = new SimpleStringProperty(three);
}
public String getOne() {
return one.get();
}
public void setOne(String one) {
this.one.set(one);
}
public String getThree() {
return three.get();
}
public void setThree(String three) {
this.three.set(three);
}
public String getTwo() {
return two.get();
}
public void setTwo(String two) {
this.two.set(two);
}
}
public static void main(String[] args) {
launch();
}
@Override
public void start(Stage stage) throws Exception {
TableView<TableData> table_1 = new TableView<>();
ObservableList<TableData> myTableData = FXCollections.observableArrayList(
new TableData("Dilettante", "05.05.2020", "[email protected]"),
new TableData("DilettanteA", "05.05.4040", "[email protected]"),
new TableData("DilettanteB", "05.05.3030", "[email protected]"));
var firstColumn = new TableColumn<TableData, String>("First Column");
var secondColumn = new TableColumn<TableData, String>("Second Column");
var thirdColumn = new TableColumn<TableData, String>("Third Column");
firstColumn.setCellValueFactory(new PropertyValueFactory<>("one"));
secondColumn.setCellValueFactory(new PropertyValueFactory<>("two"));
thirdColumn.setCellValueFactory(new PropertyValueFactory<>("three"));
table_1.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> {
if (event.getButton() == MouseButton.SECONDARY) {
// Вариант ОДИН ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if (table_1.getItems().size() == 1) {
table_1.getItems().removeAll(myTableData);
}
table_1.getSelectionModel().getSelectedItems().forEach(item -> table_1.getItems().remove(item));
// Вариант ДВА +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// var copyTable = new ArrayList<TableData>(table_1.getSelectionModel().getSelectedItems());
// copyTable.forEach(s -> table_1.getItems().remove(s));
}
});
table_1.setItems(myTableData);
table_1.getColumns().addAll(firstColumn, secondColumn, thirdColumn);
stage.setScene(new Scene(table_1));
stage.setWidth(600);
stage.setWidth(400);
stage.centerOnScreen();
stage.show();
}
}