JavaFX-关闭警报框后自动显示

时间:2019-05-07 17:47:22

标签: java events javafx

我要在关闭警报框后自动再次显示它,这是基于特定条件的。 这是我的代码:

protected void showInputDialog()
{
    FXMLLoader loader = new FXMLLoader(getClass().getResource("AddRecordDialog.fxml"));
    Parent root = loader.load();
    Scene scene = new Scene(root);
    AddRecordDialogController addRecordDialogController = (AddRecordDialogController)loader.getController();
    addRecordDialogController.setAddNewSalesDialogController(this);
    addRecordDialogController.setInvoice(this.invoice);
    this.addRecordDialog = new Stage();
    this.addRecordDialog.setTitle("Add Record");
    this.addRecordDialog.initModality(Modality.APPLICATION_MODAL);
    this.addRecordDialog.initOwner(root.getScene().getWindow());
    this.addRecordDialog.setScene(scene);
    this.addRecordDialog.sizeToScene();
    this.addRecordDialog.setResizable(false);
    //Event handler for when a Window is closed.
    this.addRecordDialog.setOnHiding(new EventHandler<WindowEvent>()
    {
        @Override
        public void handle(WindowEvent we)
        {
            if(nextItem == true)
               showInputDialog();
            nextItem = false;
        }
    });
    this.addRecordDialog.showAndWait();
}

第二个对话框出现,但第一个对话框没有消失。 以编程方式关闭对话框,在其他位置使用stage.close();。 我看到here需要以编程方式关闭事件调用setOnHiding方法。 如果删除事件处理程序,则前一阶段将关闭。 但是我想在该阶段关闭后再次打开该阶段的新实例。 请帮忙。

编辑: ...是,我检查了nextItem变量是true

我使用了System.out.println("Next Item: " + nextItem);

1 个答案:

答案 0 :(得分:0)

根据kendavidson的评论,我找到了解决方案。 我已将代码更改为:

        this.addRecordDialog.setOnHidden(new EventHandler<WindowEvent>()
        {
            @Override
            public void handle(WindowEvent we)
            {
                System.out.println("Next Item: " + nextItem);
                if(nextItem == true)
                {
                    nextItem = false;
                    showInputDialog();
                }
            }
        });

感谢肯达维森。