javaFxTableView可编辑表格,当我添加一个TextFieldTableCell至TableColumn的CellFactory中后,在编辑数据时后台报错

本文解决TableView使用TextFieldTableCell编辑时后台报错的问题,通过设置适当的StringConverter实现不同类型数据的正确转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值