java - 组合框不显示绑定(bind)值

标签 java javafx-2 javafx-8

我有一个组合框 cb和一个ObservableList<StringProperty> data 我已经绑定(bind)了cbItemsdata如下:

Bindings.bindContent(cb.getItems(), data);

假设data具有以下项目:str1, str2, str3, str4

当我改变data ,组合框毫无问题地获取新列表。 但如果str3cb 中选择我更改了 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/

相关文章:

java - 如何在java中使压缩更快地归档文件

javafx-2 - JavaFX 中的内部框架

java - 如何在 JavaFX 中设置 tableView 的行前景色?

JavaFX TreeTableView 列 setOnEditCommit() 拒绝接受处理程序以保存已编辑的单元格

JavaFX 8 : setting style for inner VBox doesn't apply

java - 显示表格标签以在单列中创建多个链接

java - 切换android Activity时出现空指针异常

java - 如何在 JavaFX 应用程序中执行没有 webview 或 fxml 的 javascript?

java - 使用法拉利方法求四次方程的实根

javafx - 使用 FXML 在应用程序中预填充 ListView