Почему не работает ComboBox с условием if-else в JavaFX

Подскажите, пожалуйста, как добавить условие if-else к comboBox в JavaFX.
Хочу сделать второй ComboBox зависимым от выбора в первом ComboBox.

@FXML
private ComboBox<String> Region_Box;

@FXML
private ComboBox<String> State_Box;

// Массив первого списка
private String[] Region_Box_Arr = {"Санкт-Петербург", "Москва", "Алтайский край"};

// Массивы второго списка
private String[] SPB = {"Санкт-Петербург"};
private String[] MSK = {"Москва"};
private String[] AltKr = {"Барнаул", "Бийск", "Рубцовск", "Новоалтайск", "Заринск", "Камень-на-Оби", "Славгород", "Алейск"};       
        
@FXML
void initialize() {}

@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
        
    Region_Box.getItems().addAll(Region_Box_Arr);

    State_Box.getItems().addAll(AltKr); // если комментирую эту строку 
    // и снимаю комментарий с условия if else , то второй ComboBox не работает

    // if (Region_Box.getSelectionModel().equals("Алтайский край"))
    // {
    //     State_Box.getItems().addAll(AltKr);
    // }
    // else if (Region_Box.getSelectionModel().equals("Санкт-Петербург"))
    // {
    //     State_Box.getItems().addAll(SPB);
    // }
    // else if (Region_Box.getSelectionModel().equals("Москва"))
    // {
    //     State_Box.getItems().addAll(MSK);
    // }
    // else State_Box.getItems().addAll("");
}

Ответы (1 шт):

Автор решения: Nowhere Man

В JavaFX нужно добавлять слушатель ChangeListener для значения в комбобоксе, которое возвращается из метода ComboBoxBase::valueProperty:

@Override
public void initialize(URL location, ResourceBundle resources) {
    Region_Box.getItems().addAll(Region_Box_Arr);
    
    Region_Box.valueProperty().addListener((observable, oldVal, newVal) -> {
        // очистить связанный комбобокс
        State_Box.getItems().clear();
        if (newVal == null) {
            State_Box.setDisable(true);
        } else {
            if ("Санкт-Петербург".equals(newVal)) {
                State_Box.getItems().addAll(SPB);
            } else if ("Москва".equals(newVal)) {
                State_Box.getItems().addAll(MSK);
            } else { // осталось только значение "Алтайский край"
                State_Box.getItems().addAll(AltKr);
            }
            State_Box.setDisable(false);
        } 
    });
}
→ Ссылка