我有一个组合框 cb
和一个ObservableList<StringProperty> data
我已经绑定(bind)了cb
的Items
至data
如下:
Bindings.bindContent(cb.getItems(), data);
假设data
具有以下项目:str1, str2, str3, str4
当我改变data
,组合框毫无问题地获取新列表。
但如果str3
在 cb
中选择我更改了 str3
的值至NewStr3
在数据中,该更改未显示在 cb 中。有时,即使它引用的基础数据是正确的,显示的列表也是错误的(它显示 str3 而不是 NewStr3)。
当底层模型更改时,如何强制组合框显示新值?
最佳答案
组合框中选定的项目不需要是组合框项目列表的元素。 (例如,在可编辑的组合框中,您可以键入列表中没有的项目。)如果您从这个角度考虑您的示例,那么它的行为如您所描述的那样就不足为奇了。
如果您想在列表可能更改时强制所选值成为基础列表的元素,则需要定义如果列表发生变化而不再包含所选项目,则所选项目应如何更改(您将如何执行此操作并不明显,可能取决于您的应用程序逻辑)。一旦您知道自己想要做什么,就可以使用 ListChangeListener
来实现它:
cb.getItems().addListener((ListChangeListener.Change change) -> {
String newSelectedItem = ... ; // figure item that should be selected instead
cb.setValue(newSelectedItem);
});
最简单的实现就是cb.setValue(null);
,这意味着如果列表发生更改,不再包含当前选定的项目,则不会选择任何项目。
关于java - 组合框不显示绑定(bind)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26076725/