Выбранный элемент поля со списком JavaFX исчезает после фильтрации в javafx-19, но отлично работает в javafx-8
Я использовал Combobox в редактируемом режиме, и я использовал отфильтрованный список, чтобы отфильтровать список по мере изменения текста в редакторе. Фильтрация работает, когда я набираю данные в редакторе. Проблема возникает, когда я выбираю члена из раскрывающегося списка, выбранное значение исчезает, как только я выбираю члена из раскрывающегося списка.
Когда я запускаю тот же код в jdk 8, он работает, но в jdk 19 возникает проблема.
Я загрузил оба Vodeo.
Код отображается следующим образом
public TextField _unit_type;
public TextField _symbol;
public TextField _formal_name;
public ComboBox<UnitQuantityCode> _unit_quantity_code;
public TextField _number_of_decimal_places;
private UnitSecondary unitSecondary;
private UnitCodeDao unitCodeDao;
private ObservableList<UnitQuantityCode> codes;
private FilteredList<UnitQuantityCode> filteredList;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
unitCodeDao = new UnitCodeDao();
unitSecondary = new UnitSecondary();
codes = FXCollections.observableArrayList();
filteredList = new FilteredList<>(codes);
codes.setAll(unitCodeDao.getAllUqc());
_unit_quantity_code.setItems(filteredList);
_unit_quantity_code.setCellFactory(new CodeCellFactory());
_unit_quantity_code.setConverter(new CodeStringConverter());
_unit_quantity_code.getEditor().focusedProperty().addListener(new UnitComboFocusListener());
_unit_quantity_code.getEditor().textProperty().addListener(new TextChangeListener());
}
private class CodeCellFactory implements Callback<ListView<UnitQuantityCode>, ListCell<UnitQuantityCode>>{
@Override
public ListCell<UnitQuantityCode> call(ListView<UnitQuantityCode> unitQuantityCodeListView) {
return new CodeCell();
}
}
private class CodeCell extends ListCell<UnitQuantityCode>{
@Override
protected void updateItem(UnitQuantityCode unitQuantityCode, boolean b) {
super.updateItem(unitQuantityCode, b);
if (unitQuantityCode == null || b){
setGraphic(null);
setText(null);
}else {
setGraphic(null);
setText(unitQuantityCode.getCode());
}
}
}
private class CodeStringConverter extends StringConverter<UnitQuantityCode>{
private UnitQuantityCode u;
@Override
public String toString(UnitQuantityCode unitQuantityCode) {
if (unitQuantityCode == null)
return null;
u = unitQuantityCode;
return unitQuantityCode.getCode();
}
@Override
public UnitQuantityCode fromString(String s) {
return u;
}
}
private class UnitComboFocusListener implements ChangeListener<Boolean>{
@Override
public void changed(ObservableValue<? extends Boolean> observableValue, Boolean aBoolean, Boolean t1) {
if (t1){
_unit_quantity_code.show();
}else{
_unit_quantity_code.hide();
}
}
}
private class TextChangeListener implements ChangeListener<String>{
@Override
public void changed(ObservableValue<? extends String> observableValue, String s, String t1) {
if (!t1.equals("")){
Platform.runLater(()->filteredList.setPredicate(
t->t.getCode().toLowerCase().contains(t1.toLowerCase())));
}else{
Platform.runLater(()->filteredList.setPredicate(null));
}
}
}
Пожалуйста, предоставьте решение.