当前位置: 首页 > 知识库问答 >
问题:

javafx:alert自动关闭对话框

边国安
2023-03-14
 @FXML
public void newItem() {

    FXMLLoader fxmlLoader = new FXMLLoader();
    fxmlLoader.setLocation(getClass().getResource("newEventDialog.fxml"));
    try {
        dialog.getDialogPane().setContent(fxmlLoader.load());
    } catch (IOException e) {
        System.out.println("Error loading new Dialog : " + e.getMessage());
    }

    newEventDialogController newController = fxmlLoader.getController();

    dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);


    Optional<ButtonType> result = dialog.showAndWait();


    if (result.isPresent() && result.get() == ButtonType.OK) {

            newController.addItem();
            refreshList();



    }
}
public void addItem() {
    if (validateFields()) {

        String eventdate = datepick.getValue().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));

        Item item = new Item(namefield.getText(), emailfield.getText(), typefield.getText(), eventdate);
        Datasource.getInstance().insertEvent(item);
    } else {
        Alert alert = new Alert(Alert.AlertType.ERROR);

        alert.setContentText("Error: One or more fields are empty.");
        alert.showAndWait();


    }

}

共有1个答案

柯波娃
2023-03-14

您可以截取对话框ButtonType.OK操作。试试这个。

dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
final Button btOk = (Button)dialog.getDialogPane().lookupButton(ButtonType.OK);
btOk.addEventFilter(ActionEvent.ACTION, event -> {
   if (newController.addItem()) {
       refreshList();
   } else {
       event.consume();  // Make dialog NOT to be closed.
   }
});

Optional<ButtonType> result = dialog.showAndWait();

在对话框的控制器中

// Return false, if you want NOT to close dialog.
public boolean addItem() {
    if (validateFields()) {
        String eventdate = datepick.getValue().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
        Item item = new Item(namefield.getText(), emailfield.getText(), typefield.getText(), eventdate);
        Datasource.getInstance().insertEvent(item);
        return true;
    } else {
        Alert alert = new Alert(Alert.AlertType.ERROR);
        alert.setContentText("Error: One or more fields are empty.");
        alert.showAndWait();
        return false;
    }
}

dialogAPI文档中描述了这种方法。对话框验证/拦截按钮操作

 类似资料:
  • 我想在我的编码中添加对话框。对话框可以弹出。假设用户按下ok按钮后对话框将关闭,但对话框将自动关闭。这是我的密码。有什么问题吗?

  • 场景是:您在窗口(a)中,单击按钮/链接启动打印过程,然后打开一个新窗口(B),其中包含要打印的内容,打印对话立即显示,如果您单击窗口(B)的取消按钮,那么您应该可以再次打印,但当您单击窗口(B)的打印按钮打印时,您可以打印,但窗口(a)的按钮不能再次继续打印。给我一些解决方案…!!!在chrome,Firefox和internet explorer上工作

  • 本文向大家介绍C#实现winform自动关闭MessageBox对话框的方法,包括了C#实现winform自动关闭MessageBox对话框的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现winform自动关闭MessageBox对话框的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 我有一个JFrame调用一个新的JDialog,这个JDialog有一个关闭它的按钮。 当JDialog关闭时,JFrame应该重新绘制。但是当我用按钮关闭JDialog时,什么也不会发生,当我用经典的“X”按钮关闭时,就不会发生这种情况。 这是来自JFrame的windowListener: 这里是JDialog中关闭JDialog的按钮的代码: 就像我说的,监听器中的JFrame需要在JDia

  • 问题内容: 我正在开发可访问性应用程序。当用户想要离开该应用程序时,我会显示一个对话框,在该对话框中他必须确认要离开,如果5秒钟后他仍未确认,则该对话框应自动关闭(因为用户可能意外打开了该对话框)。这类似于在Windows上更改屏幕分辨率时发生的情况(会出现警报,如果您没有确认,它将恢复为以前的配置)。 这是我显示对话框的方式: 显示对话框后5秒钟如何关闭对话框? 问题答案: