我尝试填充tableView,我遵循了docs.oracle中给出的教程,但是在我的表中有Integer字段,因此我也做同样的事情来添加它们。

信息类中的代码(如Person类):



private SimpleIntegerProperty gel;

public int getGel() {
    return gel.get();
}

public void setGel(int pop) {
    gel.set(pop);
}





Main类中的代码:



TableColumn gel = new TableColumn("Gel");
gel.setMinWidth(100);
gel.setCellValueFactory(new PropertyValueFactory<Information, Integer>("gel"));
gel.setCellFactory(TextFieldTableCell.forTableColumn());

gel.setOnEditCommit(new EventHandler<CellEditEvent<Information, Integer>>() {

    @Override
    public void handle(CellEditEvent<Information, Integer> t) {
        ((Information) t.getTableView().getItems()
            .get(t.getTablePosition().getRow()))
            .setGel(t.getNewValue());
    }
});





但我有错误:

Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
   at javafx.util.converter.DefaultStringConverter.toString(DefaultStringConverter.java:34)
   at javafx.scene.control.cell.CellUtils.getItemText(CellUtils.java:100)
   at javafx.scene.control.cell.CellUtils.updateItem(CellUtils.java:201)
   at javafx.scene.control.cell.TextFieldTableCell.updateItem(TextFieldTableCell.java:204)

最佳答案

问题出在您的电池工厂。

TableColumn应键入为TableColumn<Information, Integer>。然后您将在这里看到错误:

gel.setCellFactory(TextFieldTableCell.forTableColumn());


(您在运行时遇到的相同错误)。原因是静态回调forTableColumn仅适用于String类型的TableColumn

对于其他类型,您必须提供一个自定义的字符串转换器。这将解决您的问题:

    gel.setCellFactory(TextFieldTableCell.forTableColumn(new StringConverter<Integer>(){

        @Override
        public String toString(Integer object) {
            return object.toString();
        }

        @Override
        public Integer fromString(String string) {
            return Integer.parseInt(string);
        }

    }));

关于javafx - 如何在JavaFX中使用SimpleIntegerProperty,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27468546/

10-08 22:30