如何创建可以绑定到单独POJO上的字段的JavaFX 8 ComboBox

时间:2014-12-30 18:44:26

标签: combobox lambda java-8 javafx-8

我遇到了以下情况的挑战。假设我有一个名为DatabaseRecord的记录,它是一个包含多个字段的POJO:

public class DatabaseRecord {
    private Long recordId;
    private StringProperty foreignKeyId;
    private StringProperty otherValuesForMainRecord....

    ... setters/getters

public class LookUpDataValue {
    private String recordId;
    private String descriptiveText;
    private String otherValues.....
....

我有一个组合框,显示foreignKeyId值的可选值,如下所示:

@FXML
ComboBox<LookUpDataValue> combobox;

combobox.setCellFactory
    (new Callback<ListView<LookUpDataValue>, ListCell<LookUpDataValue>>() {
        @Override
        public ListCell<LookUpDataValue> call(ListView<LookUpDataValue> p) {
            ListCell<LookUpDataValue> cell = new ListCell<LookUpDataValue>() {
                @Override
                protected void updateItem(LookUpDataValue item, boolean empty) {
                    super.updateItem(item, empty);
                    if (empty) {
                        setText("");
                    } else {
                        setText(item.getDescriptiveText());
                    }
                }

            };
            return cell;
        }
    });

我想将POJO DatabaseRecord.foreignKeyIdProperty双向绑定到combobox.valueProperty() - 但这不起作用,因为一个是字符串,一个是LookUpDataValue对象。

我希望在加载记录时正确设置这个组合框,并在记录发生变化时相反地更新记录。

我很感激任何关于我能在哪里找到这个例子的指示...

1 个答案:

答案 0 :(得分:0)

我无法更改我的数据模型,因此我发现以下解决方案有效。

// Handle ComboBox event.
myComboBox.setOnAction((event) -> {
    LookUpDataValue selected = myComboBox.getSelectionModel().getSelectedItem();
    if(selected != null){
        dto.setForeignKeyId(selected.getId());
    }
});

这很有效。感谢您的评论。