I Want to change the second comboBox items based on the user select of item in another comboBox. I do have courseCB comboBox that the user have to select first and then selct from mealCB comboBox; mealCB items should change based of courseCB select item.
@FXML
private ComboBox<String> courseCB;
@FXML
private ComboBox<String> mealCB;
@FXML
void initialize() {
// courseCB.
ObservableList<String> courseList = FXCollections.observableArrayList(fileReader.getMealCourseArray());
courseCB.setItems(courseList);
courseCB.setValue("main meal");
courseCB.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observableValue, String s, String t1) {
switch (t1){
case "first meal": {
ObservableList<String> mealByCourse = FXCollections.observableArrayList(fileReader.getMealsByCourse("first meal"));
mealCB.setItems(mealByCourse);
}
case "main meal": {
ObservableList<String> mealByCourse = FXCollections.observableArrayList(fileReader.getMealsByCourse("main meal"));
mealCB.setItems(mealByCourse);
}
case "drink": {
ObservableList<String> mealByCourse = FXCollections.observableArrayList(fileReader.getMealsByCourse("drink"));
mealCB.setItems(mealByCourse);
}
break;
}
}
});
}
the code of getMealBycourse:
public static String[] getMealsByCourse(String mealCourse){
ArrayList<String> mealsList = new ArrayList<>();
Meal[] meals ;
fileReader filereader= new fileReader();
meals = filereader.getMealArray();
for (int i = 0; i < meals.length ; i++) {
if ((meals[i].getMealCourse()).compareTo(mealCourse)==0) {
mealsList.add(meals[i].getMealName());
}
}
String [] mealsByCourse = mealsList.toArray(new String[mealsList.size()]);
return mealsByCourse;
}
fileReader.getMealCourseArray() will return an array of items of courseMeal and populate the courseCB (comboBox) with it. the problem is that that mealCB is getting values of drinks only. the method of get mealByCourse is working very well by testing it. so what is needed to change in the addListener to make it work.