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()));