AlertType.CONFIRMATION 在 JavaFX 中抛出 IllegalArgumentException
AlertType.CONFIRMATION throws IllegalArgumentException in JavaFX
我试图在每次用户尝试从 ListView 中删除项目时添加确认类型的警报 window。但是每当我这样做时,一旦我按下按钮,就会抛出一个 IllegalArgumentException 说,添加了重复 children。这是代码:
@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 时。
我在这里遗漏了什么?
您可能会遇到此异常,因为取消按钮已存在于确认类型中
所以你可以做
alert.getButtonTypes().clear();
之前
alert.getButtonTypes().addAll(ButtonType.YES, ButtonType.CANCEL);
更好的方法(如评论中提到的 Slaw)是调用 setAll 而不必清除 re-Add
alert.getButtonTypes().setAll(ButtonType.YES, ButtonType.CANCEL)
我试图在每次用户尝试从 ListView 中删除项目时添加确认类型的警报 window。但是每当我这样做时,一旦我按下按钮,就会抛出一个 IllegalArgumentException 说,添加了重复 children。这是代码:
@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 时。 我在这里遗漏了什么?
您可能会遇到此异常,因为取消按钮已存在于确认类型中 所以你可以做
alert.getButtonTypes().clear();
之前
alert.getButtonTypes().addAll(ButtonType.YES, ButtonType.CANCEL);
更好的方法(如评论中提到的 Slaw)是调用 setAll 而不必清除 re-Add
alert.getButtonTypes().setAll(ButtonType.YES, ButtonType.CANCEL)