如何使用对象列表中的字符串填充 ComboBox?

How to populate ComboBox with Strings from a list of objects?

我有一个包含实例变量 String countryName;Country 个对象的列表。 我不知道如何用国家/地区对象列表填充 ComboBox

我尝试通过创建另一个名为

的列表来使用解决方法来做到这一点

ObservableList<String> listCountriesString = FXCollections.observableArrayList();

并遍历它并将每个实例变量 countryName 添加到新列表中:

private ObservableList<Country> listCountries = FXCollections.observableArrayList();

for (Country country : listCountries) {
    listCountriesString.add(country.getCountryName());
}

如何将 ComboBox 与我的 Country 对象一起使用,并且只显示国家/地区名称?

@FXML
ComboBox<Country> comboBoxCountry;
public class Country {
    private int countryId;
    private String countryName;
    private String createDate;
    private String lastUpdate;

    public Country(int countryId, String countryName, String createDate, String lastUpdate) {
        this.countryId = countryId;
        this.countryName = countryName;
        this.createDate = createDate;
        this.lastUpdate = lastUpdate;
    }

    ... getters and setters

它非常简单,当然是 documentation 的一部分。

首先,您需要创建一个 cellFactory 来负责设置 ComboBox 项的文本。

Callback<ListView<Country>, ListCell<Country>> cellFactory = lv -> new ListCell<Country>() {

    @Override
    protected void updateItem(Country item, boolean empty) {
        super.updateItem(item, empty);
        setText(empty ? "" : item.getCountryName());
    }

};

然后像这样使用它:

comboBoxCountry.setButtonCell(cellFactory.call(null));
comboBoxCountry.setCellFactory(cellFactory);

然后您可以像这样添加 Countries

comboBoxCountry.getItems().add(new Country("Germany"...));

祝你好运!