我需要一個combobox填充通過observablelist包含從數據庫中檢索的特定數據。這是我的來源。JAVAFX 8 ComboBox和ObservableList
型號
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());
});
組合框填充與NAME場和監聽來獲取相對ID並把它傳遞給查詢存儲在數據庫的數據。
好,似乎一切工作,但我有兩個問題:
當用戶需要修改這個記錄,我需要從數據庫的ID和組合框選擇相對名稱。我怎樣才能做到這一點?
comboBank.setValue(????);
有沒有更好的方法來達到這個目標? ObservableMap可能替代ObservableList?
在此先感謝。
你應該只使用一個'StringConverter'你的組合框。 – ItachiUchiha