Я должен использовать комбинированный список, чтобы связать список значений (ключ, значение). Ключ - это значение, которое будет сохранено в базе данных, Значение - это описание, которое будет отображаться в выпадающем списке.
например
Key / value
C1 Code one
C2 Choice two
C3 Choice three
...
Получив, например, выбранное значение «Вариант два», я бы хотел получить код C2.
Для хранения элементов в элементах я определил класс ComboVal.
Определяя свой комбобокс, я застрял в определении функции setConverter.
Компилятор выдает мне следующую ошибку: "Ошибка: (1093, 49) java: конструктор FormatStringConverter в классе javafx.util.converter.FormatStringConverter не может быть применен к данным типам; обязательно: java.text.Format; найдено: нет аргументы
причина: фактические и формальные списки аргументов различаются по длине "
class ComboVal {
String[] dato = {null, null};
ComboVal (String Key, String Value)
{
setValue(Key, Value);
}
ComboVal ()
{
setValue(null, null);
}
String getValue ()
{
return dato[1];
}
String getKey ()
{
return dato[0];
}
void setValue (String Key, String Value)
{
dato[0] = Key;
dato[1] = Value;
}
}
classe myclass {
....
/*
Parameter ctrl is a List containing information for dynamyc creation of combobox
*/
void mothod (List ctrl)
{
VBox box = new VBox();
box.getChildren().add(new Label(ctrl. label));
ObservableList items = FXCollections.observableArrayList();
ComboBox<ComboVal> cb = new ComboBox<>();
cb.setId(ctrl.name);
cb.setItems(items);
//----->>> compiler report error in the next row <<<<<<<<
cb.setConverter(new FormatStringConverter<ComboVal>() {
@Override
public String toString (ComboVal object)
{
return (object.getValue());
}
@Override
public ComboVal fromString (String string)
{
return null;
}
});
ctrl.options.forEach((k, v) -> {items.add(new ComboVal(k, v));});
cb.setCellFactory(new Callback<ListView<ComboVal>, ListCell<ComboVal>>() {
@Override
public ListCell<ComboVal> call (ListView<ComboVal> p)
{
return new ListCell<ComboVal>() {
@Override
protected void updateItem (ComboVal item, boolean empty)
{
super.updateItem(item, empty);
if (item == null || empty)
{
setGraphic(null);
}
else
{
setGraphic(new Text(item.getValue()));
}
}
};
}});
box.getChildren().add(cb);
}