Как я могу создать ComboBox, который использует значения из другого ComboBox? JavaFX - PullRequest
0 голосов
/ 05 июня 2019

У меня есть два ComboBox: fruits и drinks.

fruits имеет строки: "apple", "orange", "banana"

drinks имеет строки: "water", "coffee", "juice"

Как создать новый ComboBox, который имеет значения, которые пользователь выбирает для fruits ComboBox и drinks ComboBox?

ex: если пользователь выбирает apple и water, новый ComboBox должен включать apple и water в качестве параметров.

1 Ответ

0 голосов
/ 05 июня 2019

Используйте слушателя к свойствам value первых 2 ComboBox ов и обновите элементы третьего из него:

@Override
public void start(Stage primaryStage) {
    ComboBox<String> c1 = new ComboBox<>();
    c1.getItems().addAll("apple", "orange", "banana");
    ComboBox<String> c2 = new ComboBox<>();
    c2.getItems().addAll("water", "coffee", "juice");
    ComboBox<String> c3 = new ComboBox<>();
    ChangeListener<String> listener = (o, oldValue, newValue) -> {
        final List<String> items = c3.getItems();
        int index = items.indexOf(oldValue);
        if (index >= 0) {
            if (newValue == null) {
                items.remove(index);
            } else {
                items.set(index, newValue);
            }
        } else if (newValue != null) {
            items.add(newValue);
        }
    };
    c1.valueProperty().addListener(listener);
    c2.valueProperty().addListener(listener);

    final VBox vBox = new VBox(c1, c2, c3);
    primaryStage.setScene(new Scene(vBox));
    primaryStage.show(); 
}

Обратите внимание, что это не мешает одной и той же строке бытьдобавлено из обоих ComboBox es.

Если вы хотите добавить только без удаления элементов, измените слушатель на

ChangeListener<String> listener = (o, oldValue, newValue) -> {
    final List<String> items = c3.getItems();
    int index = items.indexOf(newValue);
    if (index < 0) {
        items.add(newValue);
    }
};

Этот слушатель действительно предотвращает дублирование элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...