如何在ControlsFX中单击X - 关闭窗口按钮时设置对话框结果

时间:2014-08-04 14:04:07

标签: java dialog javafx-2

我扩展了ControlsFX对话框以创建自定义ValidationDialog。我添加了一些自定义按钮,其中一个在点击后触发验证操作。如果传递验证,则使用OK结果关闭对话框,但如果对话框无效,则会为对话框结果操作分配虚拟Action对象。它的目的(dumy结果)只是保存用户试图填充对话框的信息,并允许他进行一些更正(不关闭窗口)。一切都会好的,但有一种情况会产生错误的结果。如果用户将填写带有错误数据的表单,请单击“验证”按钮,然后单击“X”按钮(关闭窗口)。在这些步骤之后,对话框结果仍然是验证按钮。我试图将一些监听器绑定到窗口onCloseRequest()属性,但它没有做出反应。如何解决这个问题?

以下是我的代码的缩短版本:

public class ValidationDialog extends Dialog {

    private ValidationDialog thisDialog;

    public final Action DUMMY_ACTION = new AbstractAction("OTHER") {
        {
            ButtonBar.setType(this, ButtonBar.ButtonType.OTHER);
        }

        @Override
        public void execute(ActionEvent actionEvent) {
            //do nothing
        }
    };
    public final Action VALID_OK = new AbstractAction("OK"){
        {
            ButtonBar.setType(this, ButtonBar.ButtonType.OK_DONE);
        }

        @Override
        public void execute(ActionEvent ae) {
            if (isValid()) {
                thisDialog.setResult(this);
                thisDialog.hide();
            } else {
                thisDialog.setResult(DUMMY_ACTION);
            }
        }
    };


    public ValidationDialog(Object owner, String title) {
        super(owner, title);
        thisDialog = this;
    }

    private boolean isValid(){
        return false;
    }
}

并致电:

ValidationDialog validationDialog = new ValidationDialog(stage, "Fill form");
Action result = validationDialog.show();
if (result.equals(validationDialog.VALID_OK)){
   //do important stuff
}

1 个答案:

答案 0 :(得分:0)

人们原本期望点击X总是意味着取消。

到目前为止,唯一的方法是创建自己的boolean变量,例如"有效"使用getter,然后在hide()之前设置它。

外面做:

if (dlg.isValid()) {
    //dlg success
} else {
    //dlg fail
}