如何在 ComboBox 中显示所有国家/地区列表? [JavaFX]

How do I display all country list in ComboBox? [JavaFX]

public void start(final Stage frame) throws Exception {
    String[] locales = Locale.getISOCountries();
    for (String countrylist : locales) {
        Locale obj = new Locale("", countrylist);
        String[] city = {obj.getDisplayCountry()};
        for (int x = 0; x < city.length; x++) {
            cities = FXCollections.observableArrayList(obj.getDisplayCountry());
            country = new ComboBox<String>(cities);
        }
    }
}

我想使用 Locale class 显示国家/地区列表。但是,当我 运行 代码时,我只能在组合框中显示一个国家/地区。我不确定是我弄错了循环还是什么。

您要在每个循环中创建一个新的组合框,尝试在循环外创建它并只在循环内填充它?

希望对您有所帮助。

你好,

吉安-马可

使用此代码

  public void start(Stage primaryStage) throws Exception {

                ObservableList<String> cities = FXCollections.observableArrayList();
                ComboBox<String> country = new ComboBox<String>(cities);

                String[] locales1 = Locale.getISOCountries();
                for (String countrylist : locales1) {
                    Locale obj = new Locale("", countrylist);
                    String[] city = { obj.getDisplayCountry() };
                    for (int x = 0; x < city.length; x++) {
                        cities.add(obj.getDisplayCountry());
                    }
                }
                country.setItems(cities);
 }

您在每次迭代中都在创建新的 ComboBox,这就是为什么您总是获得单个国家/地区(列表中的最后一个国家/地区)的 ComboBox。您可以使用 Stream 获取所有国家/地区。

ObservableList<String> countries = Stream.of(Locale.getISOCountries())
        .map(locales -> new Locale("", locales))
        .map(Locale::getDisplayCountry)
        .collect(Collectors.toCollection(FXCollections::observableArrayList));

ComboBox<String> cb = new ComboBox<>(countries);

这里是列表

    ComboBox<String> country = new ComboBox<>();
    String[] locales = Locale.getISOCountries();
    for (String countrylist : locales) {
        Locale obj = new Locale("", countrylist);
        String[] city = {obj.getDisplayCountry()};
        country.setItems(FXCollections.observableArrayList(locales));
    }