У меня есть форма JavaFX с двумя полями со списком, заполненными временами с шагом 15 минут для времени начала и окончания. Я пытаюсь получить поле со списком Время окончания для динамического повторного заполнения опциями, когда пользователь выбирает время начала, чтобы пользователь не мог выбрать Время окончания до времени начала, сохраняя выбор пользователя, если пользователь уже выбрал время окончания, которое все еще после времени начала.
Мне удалось заставить оба поля заполняться правильно и правильно сохранять выбор пользователя при проверке работоспособности кода, однако я не могу получить событие для корректного срабатывания, когда пользователь выбирает новое время запуска. Если я использую onMouseClicked, он запускает событие, когда вы нажимаете на поле со списком, не когда вы делаете выбор, это будет работать при использовании события onMouseExit, но после раздражающей задержки.
Как я могу заставить его даже корректно срабатывать при выборе элемента в ComboBox?
FXML
<ComboBox id="Start Dropdown" fx:id="cbStart" onMouseClicked="#handleSelectStart" prefWidth="150.0" GridPane.columnIndex="5" GridPane.rowIndex="4">
<GridPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</GridPane.margin>
</ComboBox>
<ComboBox id="End Dropdown" fx:id="cbEnd" prefWidth="150.0" GridPane.columnIndex="8" GridPane.rowIndex="4">
<GridPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</GridPane.margin>
</ComboBox>
Метод контроллера вызывается, когда handleSelectStart вызывается слушателем действия
@FXML
private void handleSelectStart(MouseEvent event){
//Get the currently selected Start time from Start ComboBox
LocalTime time = LocalTime.parse(cbStart.getValue(), timeDTF);
//Store the current Selected End time for later comparison
String currentEnd = cbEnd.getSelectionModel().getSelectedItem();
//Clear out existing options from End Combo Box ObservableList
availEndTimes.clear();
do{
availEndTimes.add(time.format(timeDTF));
time = time.plusMinutes(15);
} while(!time.equals(LocalTime.of(17, 15)));
availEndTimes.remove(0);
if(availEndTimes.contains(currentEnd)){
cbEnd.setItems(availEndTimes);
cbEnd.getSelectionModel().select(currentEnd);
//setValidEndTimes();
} else {
cbEnd.setItems(availEndTimes);
cbEnd.getSelectionModel().select(availEndTimes.get(0));
}
}
Я уверен, что упускаю что-то очевидное и простое, но я не могу этого увидеть. Если я пропустил еще один вопрос, я прошу прощения за дублирующий вопрос, но я просмотрел несколько статей здесь и на других сайтах, не выясняя его. Любая помощь будет принята с благодарностью.