防止JavaFX对话框关闭
我目前正在使用JavaFX创建一个对话框。对话框本身工作得很好,但现在我尝试添加一个输入验证,当用户忘记填写文本字段时,它会警告用户。 我的问题来了:是否有可能阻止对话框在结果转换器内关闭?像这样:防止JavaFX对话框关闭,java,javafx,Java,Javafx,我目前正在使用JavaFX创建一个对话框。对话框本身工作得很好,但现在我尝试添加一个输入验证,当用户忘记填写文本字段时,它会警告用户。 我的问题来了:是否有可能阻止对话框在结果转换器内关闭?像这样: ButtonType buttonTypeOk = new ButtonType("Okay", ButtonData.OK_DONE); dialog.getDialogPane().getButtonTypes().add(buttonTypeOk); dialog.setResultConv
ButtonType buttonTypeOk = new ButtonType("Okay", ButtonData.OK_DONE);
dialog.getDialogPane().getButtonTypes().add(buttonTypeOk);
dialog.setResultConverter((ButtonType param) -> {
if (valid()) {
return ...
} else {
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setHeaderText("Pleas fill all fields!");
alert.showAndWait();
//prevent dialog from closing
}
});
我注意到,如果在Result converter中抛出错误,对话框不会关闭,但这似乎不是解决此问题的好方法
如果无法以这种方式解决问题,我可以按中所述禁用按钮。但我更愿意保持按钮处于启用状态并显示消息
提前谢谢你 您应该如何在对话框中管理数据验证,这在Javadoc中得到了解释,我引用: 对话框验证/拦截按钮操作 在某些情况下,需要防止对话框关闭 直到对话框的某些方面变得内部一致(例如 对话框中的窗体的所有字段都处于有效状态)。为此,, 对话框API的用户应该熟悉
DialogPane.lookupButton(按钮类型)
方法。通过传入按钮类型
(已在按钮类型列表中设置),用户将
返回的节点通常为Button类型(但这取决于
如果对话框窗格.createButton(ButtonType)
方法
覆盖)。使用此按钮,用户可以添加
在按钮执行其常规事件处理之前调用,因此
用户可以通过使用事件来阻止事件处理。这里有一个
简化示例:
换句话说,您应该在按钮中添加一个事件过滤器,以便在未满足要求时使用事件,这将阻止对话框关闭
更多详细信息解决此问题的另一种方法是使用
setOnCloseRequest
,如果您不想仅在用户单击“确定”按钮时进行中继。当有关闭对话框的外部请求时,将调用事件处理程序。然后,事件处理程序可以通过使用接收到的事件来阻止对话框关闭
setOnCloseRequest(e ->{
if(!valid()) {
e.consume();
}
});
validateAndStore()方法是什么?它应该做什么?@EdvBeq这种方法并不存在,它只是为了展示想法。这只是一个自定义方法,它将验证输入数据,如果验证成功,还可能执行其他操作。如果返回true,则对话框将关闭,否则事件将被消耗,对话框将保持打开状态。我尝试了两种解决方案,发现这一种要好得多-我希望在未来几天它将获得更多的投票…这不适用。无论用户按下OK或Cancel按钮,onCloseRequest都会被激发。
setOnCloseRequest(e ->{
if(!valid()) {
e.consume();
}
});