TextFieldTableCell.forTableColumn()
работает только для TableColumn
с String
в качестве параметра второго типа, т.е. cellValueFactory
должен возвращать ObservableValue<String>
.IntegerProperty
реализует ObservableValue<Number>
.Проблема заключается в том, что ячейка пытается преобразовать элемент в String
.
. Необходимо указать StringConverter
для любого типа элемента столбца, кроме String
:
col_age.setCellFactory(TextFieldTableCell.forTableColumn(new StringConverter<Number>() {
@Override
public String toString(Number value) {
return value == null ? "" : value.toString();
}
@Override
public Number fromString(String value) {
return (value == null) ? null : Integer.parseInt(value);
}
}));
Таким образом, вы должны получить Number
для свойства newValue
события:
col_age.setOnEditCommit(new EventHandler<CellEditEvent>() {
@Override
public void handle(CellEditEvent event) {
Number a = (Number) event.getNewValue();
((Persona)event.getTableView().getItems().get(
event.getTablePosition().getRow()
)).setAge(a.intValue());
}
});