我花了好几天研究这个特定问题,并使用了许多建议的解决方案,例如我认为可能有效但实际上没有有效的“.dispose()”,但我找不到任何具体解决此问题的方法。我认为“超级用户”可能遇到过此问题或类似问题。我在 Git-Hub 上发布了一个问题,详细说明了此问题,我认为是 suggestionsProvider 参数中的一个错误,没有使用更新的列表更新自动完成框。使用此 FXExperience 的 ControlFX 的应用程序在数据库之间切换,因此生成的 JavaFX ComboBox 会使用特定于每个数据库的新参数列表进行更新,这些参数也会传递给 Textfields.bindAutoCompletion 方法。此外,每次切换数据库时,suggestionProvider 中的缺陷也会将新列表添加到旧列表中。
我重新创建了下面的详细信息,因为已经有一段时间没有得到任何确认。如有必要,您可以在此处查看问题:https://github.com/controlsfx/controlsfx/issues/1126
更新 ComboBox 和 BindAuto Completion 之前:这是更新之前 ComboBox 和 AutoComplete 中的数据 更新 ComboBox 和 BindAuto 完成之前
组合框设置为空:主题组合框重置为空 组合设置为空
仅向 ControlFX bindAutoComplete 传递空值:向 bindAutoCompletion 方法传递新值 仅向 ControlFX bindAutoComplete 传递空值
组合框中无项目:组合框下拉列表仅显示传递的空值项目 组合框中无项目
ControlsFX_bindAutoComplete 保留旧列表:尽管传递了更新的参数,Controls bindAutoCompletion 仍然保留旧的项目列表。 ControlsFX_bindAutoComplete 保留旧列表
答案1
我能够解决这个问题。与其删除这篇文章,我觉得为下一个人提供一些东西会很有用。解决方案很简单。我无法获得.dispose()方法无法正常工作。这是因为提供的建议 AutoCompletionBinding 声明不正确。.dispose() 方法会出现,但由于没有错误,我认为是其他原因。这是修复方法:
执行以下操作(无类型声明):
AutoCompletionBinding auto = TextFields.bindAutoCompletion(myField, myList);
不要这样做:
AutoCompletionBinding<String> auto = TextFields.bindAutoCompletion(myField, myList);
做出此声明后,只需在使用更新的数据重新初始化 TextField 或 ComboBox 之前调用 .dispose() 方法。
auto.dispose();