Как удалить строку из столбца таблицы javafx

введите здесь описание изображения

Это мои столбцы таблицы Курс и Описание. Если щелкнуть строку (строка становится «активной»/выделенной) и нажать кнопку Удалить, она должна удалить эту строку, как мне это сделать?

Код для моего столбца Курс: (и какой прослушиватель событий добавить к моей кнопке удалить?)

@SuppressWarnings("rawtypes")
TableColumn courseCol = new TableColumn("Course");
courseCol.setMinWidth(300);
courseCol.setCellValueFactory(new PropertyValueFactory<Courses, String>("firstName"));

final Button deleteButton = new Button("Delete");

deleteButton.setOnAction(.....

person Pim    schedule 18.01.2016    source источник
comment
Кроме того: не подавляйте необработанные типы: используйте правильный тип для столбца таблицы и представления таблицы.   -  person James_D    schedule 18.01.2016


Ответы (2)


Просто удалите выбранный элемент из списка элементов табличного представления. Если у тебя есть

TableView<MyDataType> table = new TableView<>();

тогда ты делаешь

deleteButton.setOnAction(e -> {
    MyDataType selectedItem = table.getSelectionModel().getSelectedItem();
    table.getItems().remove(selectedItem);
});
person James_D    schedule 18.01.2016
comment
Это работает, спасибо, зверь: D (я приму ответ через 10 минут) - person Pim; 18.01.2016

Если кто-то хочет удалить сразу несколько строк, есть решение, аналогичное принятому:

Сначала нам нужно изменить SelectionMethod в нашей таблице, чтобы разрешить множественный выбор:

table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

После этого нам нужно установить действие с таким кодом для кнопки:

ObservableList<SomeField> selectedRows = table.getSelectionModel().getSelectedItems();
// we don't want to iterate on same collection on with we remove items
ArrayList<SomeField> rows = new ArrayList<>(selectedRows);
rows.forEach(row -> table.getItems().remove(row));

Мы могли бы вызвать метод removeAll вместо удаления (также без создания новой коллекции), но такое решение удалит не только выбранные элементы, но и их дубликаты, если они существуют и не были выбраны. Если вы не разрешаете дубликаты в таблице, вы можете просто вызвать removeAll с selectedRows в качестве параметра.

person P. Jowko    schedule 14.05.2018