我需要一个通过observablelist填充的组合框,其中包含从DB检索的特定数据 . 这是我的来源 .
模型
public ObservableList<Bank> listBank = FXCollections.observableArrayList();
public static class Bank {
private final StringProperty id;
private final StringProperty name;
private Bank(
String id,
String name
) {
this.id = new SimpleStringProperty(id);
this.name = new SimpleStringProperty(name);
}
public StringProperty idProperty() { return id; }
public StringProperty nameProperty() { return name; }
}
视图
@FXML
private ComboBox comboBank<Bank>;
public final void getBankDataFields() {
comboBank.setItems(model.listBank);
}
comboBank.setButtonCell(new ListCell<Bank>() {
@Override
protected void updateItem(Bank t, boolean bln) {
super.updateItem(t, bln);
if (t != null) {
setText(t.nameProperty().getValue().toUpperCase());
} else {
setText(null);
}
}
});
comboBank.setCellFactory(new Callback<ListView<Bank>, ListCell<Bank>>() {
@Override
public ListCell<Bank> call(ListView<Bank> p) {
return new ListCell<Bank>() {
@Override
protected void updateItem(Bank t, boolean bln) {
super.updateItem(t, bln);
if(t != null){
setText(t.nomeProperty().getValue().toUpperCase());
} else {
setText(null);
}
}
};
}
});
comboBank.valueProperty().addListener((ObservableValue<? extends Bank> observable, Bank oldValue, Bank newValue) -> {
setIdBank(newValue.idProperty().getValue());
});
ComboBox填充了NAME字段,侦听器用于获取相对ID并将其传递给查询以在DB上存储数据 .
好吧,一切似乎都有效,但我有两个问题:
- 当用户需要修改此记录时,我需要从DB获取ID并在ComboBox中选择相对NAME . 我怎样才能做到这一点?
comboBank.setValue(????);
- 有没有更好的方法来实现这一目标? ObservableMap可以替换ObservableList吗?
提前致谢 .
1 回答
您可以通过更轻松的方式实现目标 . 您应该在ComboBox上使用
StringConverter
来显示Bank实例的名称 .要获得选定的值,即所选银行的实例,只需使用:
MCVE