Выберите элемент JFXCombobox и отправьте в новый Combobox

Я использую библиотеку JFoenix для своих Combobox.

'boxLeague.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> boxTeams.setItems(listPremierLeague));' поместит весь текст в поле со списком boxTeams, когда что-либо выбирается из поля со списком boxLeague, но я хочу сделать так, чтобы при выборе определенного элемента в поле со списком boxLeague затем заполнялось другое поле со списком.

public class Controller implements Initializable {

@FXML
private JFXComboBox<String> boxLeague;

@FXML
private JFXComboBox<String> boxTeams;

@FXML
private JFXComboBox<String> boxPlayers;


ObservableList<String> listLeagues = FXCollections.observableArrayList(
        "Bundesliga", "La Liga", "Ligue 1", "Premier League", "Serie A", "Champions League", "Europa League");

ObservableList<String> listPremierLeague = FXCollections.observableArrayList(
        "Arsenal", "Bournemouth", "Brighton", "Burnley", "Chelsea", "Crystal Palace", "Everton");




@Override
public void initialize(URL location, ResourceBundle resources) {

    boxLeague.setItems(listLeagues);
    boxLeague.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> boxTeams.setItems(listPremierLeague));
}

}


person DMT82    schedule 09.02.2018    source источник
comment
В примере у вас есть только один список команд. Я правильно понимаю, что у вас будет список команд для каждой лиги в listLeagues?   -  person Luke Stevens    schedule 09.02.2018
comment
Да, на данный момент у меня есть один список команд в listPremierLeague, и listLeagues — это все лиги, которые будут использоваться. Я собираюсь сделать, например, listBundesliga, в котором будут другие команды, и он снова будет вызываться из listLeagues.   -  person DMT82    schedule 09.02.2018


Ответы (1)


Внутри вашего слушателя вам нужно узнать, какая лига была выбрана, и соответственно установить элементы boxTeams.

boxLeague.getSelectionModel().selectedItemProperty().addListener(
  (observable, oldValue, newValue) -> { 
      if (newValue.equals("Premier League")) {
          boxTeams.setItems(listPremierLeague));
      } // else if ... (or use a switch-case here)
  }
);

Обратите внимание, что это можно улучшить, если вы не будете использовать String для лиг и команд, а создадите свои собственные классы.

person Markus K    schedule 09.02.2018
comment
Спасибо, Маркус К., я сделаю все лиги и команды классами, но хотел понять, как оператор if будет работать в лямбда-выражении. Еще одна проблема заключается в том, что когда я выбираю Премьер-лигу, появляются всплывающие команды, но если я переключаюсь на Бундеслигу, команды Премьер-лиги все равно будут там. Но это сработало бы с else-если бы это указывало на setItems(null) или (), я полагаю - person DMT82; 09.02.2018