Я пытаюсь добавить окно предупреждения типа подтверждения каждый раз, когда пользователь пытается удалить элемент из ListView. Но всякий раз, когда я это делаю, как только я нажимаю кнопку, выдается исключение IllegalArgumentException, говорящее, что добавляются повторяющиеся дочерние элементы. Вот код:
@FXML
private void handleDeleteCaption() {
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
alert.setTitle("Delete Caption");
alert.setHeaderText("Are you sure you want to delete this caption?");
alert.setContentText("All its contents will be lost. Continue?");
alert.getButtonTypes().addAll(ButtonType.YES, ButtonType.CANCEL);
Optional<ButtonType> result = alert.showAndWait();
if (result.isPresent() && result.get() == ButtonType.YES) {
captionsList.getItems().remove(selectedCaption);
}
}
Та же проблема, когда я добавляю предупреждение типа warning. Он работает только тогда, когда я не указываю тип предупреждения, а именно, когда я объявляю его как AlertType.NONE. Что я здесь упускаю?
@ thurst0n я получаю его в строке, где я вызываю метод showAndWait ()




вы, вероятно, получаете это исключение, потому что кнопка отмены уже существует в Типе ПОДТВЕРЖДЕНИЕ так что ты можешь сделать
alert.getButtonTypes().clear();
перед
alert.getButtonTypes().addAll(ButtonType.YES, ButtonType.CANCEL);
лучший способ сделать это (как Slaw упоминал в комментариях) - вызвать setAll без необходимости очищать и повторно добавлять
alert.getButtonTypes().setAll(ButtonType.YES, ButtonType.CANCEL)
Вы получаете исключение IllegalArgumentException в первой строке этого метода или при нажатии кнопки ОК?