Я работаю над приложением JavaFX и использую TableView как часть графического интерфейса следующим образом:
public TableView<Meal> meals;
И для него я назначил кнопку, которая должна удалять выбранные элементы.Чтобы сделать это, я использовал функцию, которая давала мне исключение NoSuchElementException
public void deleteMealButtonClicked()
{
ObservableList<Meal> mealsSelected = meals.getSelectionModel().getSelectedItems();
ObservableList<Meal> allMeals = meals.getItems();
mealsSelected.forEach(allMeals::remove);
}
. Я отладил свой путь, чтобы выяснить, была ли проблема в последней строке метода.
После исследования довольноНекоторое время я случайно наткнулся на кусок кода, который решил проблему.Вот метод с кодом, который работает:
public void deleteMealButtonClicked()
{
ObservableList<Meal> mealsSelected = meals.getSelectionModel().getSelectedItems();
ObservableList<Meal> allMeals = meals.getItems();
if (mealsSelected != null) {
ArrayList<Meal> rows = new ArrayList<>(mealsSelected);
rows.forEach(row -> meals.getItems().remove(row));
}
}
Мой вопрос: почему работает второй метод, а не первый?Разве это не одно и то же, кроме добавления выбранных строк в ArrayList для второго метода?
Заранее спасибо.