解决:我认为这不是JavaFX的错误,它是故意这样做的,所以如果你不想将结果保存到变量中,你可以多次从对话框中请求结果。为了刷新缓存,我在对话框中使用了setResult(null)。这对我来说很好:)
我已经创建了一个对话框来使用JavaFX编辑/创建一个人。但我想我发现了一个bug。我在对话框中添加了两个ButtonType对象。一个用于保存,一个用于中止操作。当我使用这些按钮时,它工作得很好。但如果我按下"X"关闭对话框窗口,对话框会自动再次返回最后一个结果。这意味着,如果我中止了上一次操作,而在当前操作中,我按下"X"关闭窗口,则对话框不会返回任何结果,因为中止按钮没有最后一次。但是,如果我在上一次操作中按下了保存按钮,而在当前操作中按下"X",它会再次返回同一个人,因为上次保存按钮的结果中有这个人。如何使对话框在关闭时更改为无结果?
这是我创建的动作:
this.createPersonAction = new Callback<ButtonType, PersonSession>() {
@Override
public PersonSession call(final ButtonType param) {
if (param.equals(PersonDialogController.this.saveButton)) {
final String firstName = PersonDialogController.this.firstNameField.getText();
final String lastName = PersonDialogController.this.lastNameField.getText();
final Person p = BeanFactory.createPerson(firstName, lastName);
if (p != null) {
return new PersonSession(p);
}
}
return null;
}
};
这里有我的两个按钮类型对象:
private final ButtonType saveButton = new ButtonType(GuiStringRresource.LABEL_SAVE_BUTTON, ButtonData.OK_DONE);
private final ButtonType abortButton = new ButtonType(GuiStringRresource.LABEL_ABORT_BUTTON,
ButtonData.CANCEL_CLOSE);
使用Dialog.setOnCloseRequest
方法来处理这种情况。