javaFxTableView可編輯表格,當我添加一個TextFieldTableCell至TableColumn的CellFactory中後,在編輯數據時後臺報錯

1、TableView可編輯表格,當我添加一個TextFieldTableCellTableColumnCellFactory中後,在編輯數據時後臺報錯

此問題後臺報錯信息: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()));


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章