IllegalArgumentException

IllegalArgumentException

每当用户尝试从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);
    }
}


当我添加警告类型的警报时,这是同样的问题。仅当我未指定警报类型时,即当我将其声明为AlertType.NONE时,它才起作用。
我在这里缺少什么?

最佳答案

您可能会收到此异常,因为类型CONFIRMATION中已存在按钮cancel
所以你可以做

alert.getButtonTypes().clear();


之前

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


更好的方法(如Slaw在评论中提到的)是通过调用setAll而不必清除并重新添加

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

关于java - AlertType.CONFIRMATION在JavaFX中引发IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49583048/

10-11 04:18