我扩展了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
}
答案 0 :(得分:0)
人们原本期望点击X总是意味着取消。
到目前为止,唯一的方法是创建自己的boolean
变量,例如"有效"使用getter,然后在hide()
之前设置它。
外面做:
if (dlg.isValid()) {
//dlg success
} else {
//dlg fail
}