在javafx中修复setCellFactory

时间:2016-05-31 21:03:10

标签: javafx tableview

设置setCellFactory列时遇到问题。 我的代码如下所示:

@FXML
private void EditStudentMarkAction(Integer idUser){       
    ObjectMapper mapper = new ObjectMapper();
    List<Marks> lista = null;
    String path = "http://localhost:8080/Server/source/users/"+idUser+"/marks";

    try {
        lista = mapper.readValue(new URL(path), new TypeReference<List<Marks>>(){});
    } catch (IOException ex) {
        System.out.println(ex);
    }

    ObservableList<Marks> lis = FXCollections.observableArrayList(lista);        

    columnFirst.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().getTest().getTitle()));
    columnSecond.setCellValueFactory(new PropertyValueFactory<Marks,String>("date"));       
    columnThird.setEditable(true);
    columnThird.setCellValueFactory(new PropertyValueFactory<Marks,String>("mark"));        
    columnThird.setCellFactory(TextFieldTableCell.forTableColumn());         
    columnThird.setOnEditCommit(
        new EventHandler<CellEditEvent<Marks, String>>() {
            @Override
            public void handle(CellEditEvent<Marks, String> t) {
                ((Marks) t.getTableView().getItems().get(
                        t.getTablePosition().getRow())
                        ).setMark(Float.parseFloat(t.getNewValue()));
            }
        }
    );
    tableEdit.getColumns().setAll(columnFirst,columnSecond,columnThird);
    tableEdit.setItems(lis);      
}

错误:

  

线程“JavaFX Application Thread”中的异常java.lang.ClassCastException:java.lang.Float无法强制转换为java.lang.String

当我评论行:

columnThird.setCellFactory(TextFieldTableCell.forTableColumn()); 

这是我的代码有效,但我不能编辑一行。

所以我必须将方法setCellFactory中的Float翻译成String,这样的Stack是吗?但我必须将Integer改为Float?

我添加了以下代码,但仍然没有工作,也没有构建程序:

columnThird.setCellFactory(TextFieldTableCell.forTableColumn(new StringConverter<Float>() {
        @Override
        public String toString(Float t) {
            return t.toString();
        }

        @Override
        public Float fromString(String string) {
            return Float.parseFloat(string);
        }
    }));

0 个答案:

没有答案