【发布时间】:2016-10-09 23:29:07
【问题描述】:
在 JavaFX 阶段,我想在焦点离开文本字段时验证用户输入。如果用户输入的年龄不是有效年龄(0 到 120),则会显示带有错误消息的 Dialog using ControlsFX Dialogs。
代码如下:
participantAgeTextField.focusedProperty()
.addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> ov,
Boolean oldPropertyValue, Boolean newPropertyValue)
{
if( !newPropertyValue ) { // lost focus
if( !participantAgeTextField.getText().isEmpty() ) {
if ( participantAgeTextField.getText().matches("^\\d+$")) {
int val = Integer.
parseInt(participantAgeTextField.getText());
if( val <= 0 ) {
val = 1;
} else if( val > 120 ) {
val = 120;
}
participantAgeTextField.setText(""+val);
} else {
participantAgeTextField.setText("");
Dialogs.create()
.owner(null)
.title("Error")
.masthead(null)
.message("You must enter a valid age!")
.showError();
}
}
}
}
});
这可以正常工作,除非用户输入无效值,然后尝试通过单击窗口右上角的“X”按钮来关闭窗口(阶段)。
在这种情况下,应用程序“挂起”。 (奇怪的是只在 Windows 中,在 Linux 中不会发生)。
我一直在寻找解决方法,例如当焦点更改为窗口的“X”时不显示消息。但是我没有找到检测方法。
我们将不胜感激如何解决此问题的其他想法!
乔里斯
编辑 可能是 ControlsFX 导致崩溃。我无法使用 JavaFX 对话框(在 8u40 中引入),因为我使用的是 Javafx 8u25。欢迎任何替代品!
编辑 2 不使用 ControlsFX 对话框,而是按照 DVarga 的建议“手动”创建错误消息,可以避免崩溃。但这会导致窗口关闭后出现错误消息。关于如何防止这种情况发生的任何想法?
【问题讨论】:
-
您是否尝试过使用标准 JavaFX
Alert?Alert alert = new Alert(AlertType.ERROR); alert.setContentText("You must enter a valid age!"); alert.setTitle("Error"); alert.showAndWait(); -
好建议,但不幸的是我绑定到 JavaFX 8u25(遗留代码)并且在 8u40 中引入了警报。
-
啊,我现在看到了编辑;)
-
我的错误。我应该首先指出这一点..
-
你可以看看这个:github.com/BertelSpA/openjfx-dialogs-jdk7。或者作为最后的希望,“实现”您自己的对话:stackoverflow.com/questions/8309981/…
标签: javafx controlsfx