AlertType.CONFIRMATION выбрасывает исключение IllegalArgumentException в JavaFX

Я пытаюсь добавить окно предупреждения типа подтверждения каждый раз, когда пользователь пытается удалить элемент из 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. Что я здесь упускаю?

Вы получаете исключение IllegalArgumentException в первой строке этого метода или при нажатии кнопки ОК?

thurst0n 31.03.2018 02:39

@ thurst0n я получаю его в строке, где я вызываю метод showAndWait ()

Hidayət Rzayev 31.03.2018 02:44
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
162
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы, вероятно, получаете это исключение, потому что кнопка отмены уже существует в Типе ПОДТВЕРЖДЕНИЕ так что ты можешь сделать

alert.getButtonTypes().clear();

перед

alert.getButtonTypes().addAll(ButtonType.YES, ButtonType.CANCEL);

лучший способ сделать это (как Slaw упоминал в комментариях) - вызвать setAll без необходимости очищать и повторно добавлять

alert.getButtonTypes().setAll(ButtonType.YES, ButtonType.CANCEL)

Другие вопросы по теме