java - 如何使用 IntegerProperty 在 JavaFX 中编辑单元格?

标签 java javafx

我制作了一个可编辑表格。对于具有字符串属性的列,如下所示:

col_age.setCellFactory(TextFieldTableCell.forTableColumn());
    col_age.setOnEditCommit(new EventHandler<CellEditEvent>() {
        @Override
        public void handle(CellEditEvent event) {
            String a = event.getNewValue().toString();
            int i = Integer.parseInt(a);
            ((Persona)event.getTableView().getItems().get(
                    event.getTablePosition().getRow()
            )).setAge(i);
        }
    });

现在我想让列年龄可编辑。但年龄是一个整数。所以我尝试了这个:

col_age.setCellFactory(TextFieldTableCell.forTableColumn());
    col_age.setOnEditCommit(new EventHandler<CellEditEvent>() {
        @Override
        public void handle(CellEditEvent event) {
            String a = event.getNewValue().toString();
            int i = Integer.parseInt(a);
            ((Persona)event.getTableView().getItems().get(
                    event.getTablePosition().getRow()
            )).setAge(i);
        }
    });

但我收到以下错误消息:

Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

有人可以帮助我吗?

谢谢。

最佳答案

TextFieldTableCell.forTableColumn()仅适用于 TableColumnString作为第二个类型参数,即 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());
    }
});

关于java - 如何使用 IntegerProperty 在 JavaFX 中编辑单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54668339/

相关文章:

java - aurora.jar 的 NoClassDefFoundError

java - 如何手动安装 Java Eclipse 的 e(fx)clipse 插件?

java - 如何映射 JavaFX 可观察值的值?

来自不同类的 JavaFX 事件处理

JavaFX 2 TextArea 根据其内容改变高度

java - 尝试检查权限时出现 NullPointerException

java - 在使用页面工厂和 selenium webdriver 实现页面对象建模时,这两种方法中哪一种是更好的方法?

java - 使用 Swing 设计聊天布局

java - 在 Javafx 8 中,如何获得 3d 节点的正确屏幕位置?

Java - 从MySQL获取乱码结果(列表)