1、TableView可编辑表格,当我添加一个TextFieldTableCell至TableColumn的CellFactory中后,在编辑数据时后台报错
此问题后台报错信息:Exception in thread "JavaFX Application Thread"java.lang.IllegalStateException: Attempting to convert text input into Object, but provided StringConverter is null. Be sure to set a StringConverter in your cell factory.
源代码为
wfidCol.setCellFactory(
new Callback<TableColumn<Wfinfo,Integer>, TableCell<Wfinfo, Integer>>() {
public TableCell<Wfinfo,Integer> call(TableColumn<Wfinfo, Integer>param) {
TextFieldTableCell<Wfinfo,Integer>cell= newTextFieldTableCell<>();
return cell;
}
});
我总是在纠结为什么会报没有StringConverter,查找API发现,TextFieldTableCell,创建时构造方法中默认不设置StringConverter,所以应该对cell设置Integer对应的IntegerStringConverter,API说明如下:
修改后源代码如下:
wfidCol.setCellFactory(
newCallback<TableColumn<Wfinfo, Integer>, TableCell<Wfinfo,Integer>>() {
public TableCell<Wfinfo,Integer> call(TableColumn<Wfinfo, Integer>param) {
TextFieldTableCell<Wfinfo, Integer>cell = new TextFieldTableCell<>(newIntegerStringConverter());
return cell ;}
});
同理,不同数据类型有不同的StringConverter对象,具体可参照API
- java.lang.Object
- javafx.util.StringConverter<T>
- Direct Known Subclasses:
BigDecimalStringConverter,BigIntegerStringConverter,BooleanStringConverter,ByteStringConverter,CharacterStringConverter,DateTimeStringConverter,DefaultStringConverter,DoubleStringConverter,FloatStringConverter,FormatStringConverter,IntegerStringConverter,LongStringConverter,NumberAxis.DefaultFormatter,NumberStringConverter,ShortStringConverter
而如果使用TextFieldTableCell来编辑String类型数据,则只需要如下设置即可:
remarkinfoCol.setCellFactory(TextFieldTableCell.<Wfinfo>forTableColumn());
也可以直接使用forTableColumn方法,但仍需要传送转换器IntegerStringConverter:
wfidCol.setCellFactory(TextFieldTableCell.forTableColumn(new IntegerStringConverter()));