bas*_*aad 7 dialog javafx javafx-8
我目前有一个包含四个TextField的对话框,从中收集输入.当输入无法满足我的要求时,对话框应保持打开状态并显示错误消息.我目前有以下代码:
dlg.setResultConverter(dialogButton -> {
if (dialogButton == createButtonType) {
ArrayList<String> returnList = getInput();
if (returnList != null) {
return returnList;
}
else {
dlg.showAndWait();
}
}
return null;
});
Optional<ArrayList<String>> result = dlg.showAndWait();
result.ifPresent(customerDetails -> {
//Use the input for something
});
Run Code Online (Sandbox Code Playgroud)
该getInput()方法从TextFields获取文本并根据某些要求对其进行测试.当输入通过时,四个字符串被放入ArrayList<String>.否则,该方法返回null.如您所见,结果转换器检查方法是否返回null.如果没有,它只会返回ArrayList<String>.
但是,当验证失败时,对话框应保持打开状态.它适用dlg.showAndWait(),但缺点是它会触发错误:java.lang.IllegalStateException: Stage already visible.(它继续工作,但得到错误不是应该的方式)
我的问题是:有没有人知道如何做到这一点,而不会触发错误?
注意:我使用的是JavaFX 8(JDK 1.8.0_40),它具有内置的对话功能.
Dav*_*_cz 18
final Button okButton = (Button) dialog.getDialogPane().lookupButton(ButtonType.OK);
okButton.addEventFilter(ActionEvent.ACTION, ae -> {
if (!isValid()) {
ae.consume(); //not valid
}
});
Run Code Online (Sandbox Code Playgroud)
对我来说很好.只需使用过滤器,因为它首先触发.
BTW在官方文档中有描述.
将侦听器添加到您的TextFields,验证用户输入.
如果用户输入有效,如果用户输入无效,则启用"OK" Button(或其名称),禁用Button.
如果禁用Button关闭,Dialog则关闭的唯一方法Dialog是取消,这会导致结果为空Optional.
| 归档时间: |
|
| 查看次数: |
5853 次 |
| 最近记录: |