Я пытаюсь добавить ComboBox в TableView, но по какой-то причине не могу выполнить преобразование.За кулисами я хочу начать разговор, если значение равно 0, тогда должно отображаться «свободно», если значение равно 1, тогда в ComboBox будет указано «принято», и как только пользователь изменит значение в ComboBox, будетсохраните его целочисленное значение.
Я не уверен, как добавить конвертер, и он выдает следующую ошибку при event.getNewValue()
:
невозможно преобразовать int в строку.
Любая помощь, где я делаю неправильно?
private final IntegerProperty mode;
public int getMode() {
return mode.get();
}
public void setMode(int mode) {
this.mode.set(mode);
}
public IntegerProperty modeProperty() {
return mode;
}
Set<String> modeList = new HashSet<>();
modeList.add("Free");
modeList.add("Taken");
var converter=modeConverter();
TableColumn<Review, String> modeCombo = new TableColumn("Mode");
modeCombo.setCellValueFactory(new PropertyValueFactory("mode"));
modeCombo.setCellFactory(ComboBoxTableCell.forTableColumn(converter); //How to apply the converter.
modeCombo.setCellFactory(ComboBoxTableCell.forTableColumn(FXCollections.observableList(modeList))));
modeCombo.setOnEditCommit(event -> {
mode.setOperationMode(event.getNewValue()); //Method cannot be applied java.lang.String. But I already make the conversatin via modeConverter
});
...
private StringConverter modeConverter() {
return new StringConverter<Integer>() {
@Override
public String toString(Integer object) {
if (object == 0) {
return "FREE";
} else {
return "Taken";
}
}
@Override
public Integer fromString(String string) {
if (string.equalsIgnoreCase("free")) {
return 0;
} else {
return 1;
}
}
};
}