正确使用setCellValueFactory

时间:2017-07-06 16:19:56

标签: java javafx tablecolumn

我正在尝试执行以下操作:

tableColumns[0].setCellValueFactory(
            new PropertyValueFactory<DiaryEntry,String>("username")
    );    
tableColumns[1].setCellValueFactory(
            new PropertyValueFactory<DiaryEntry,Project>("project")
    );

所以第一个完美无缺。它在我的类&#34; DiaryEntry&#34;中使用了getUsername()方法。为了显示字符串。第二个是使用Method getProject()并尝试将Project添加到我的表中。当这样做时,我最终会得到像&#34; 2xProject2353asxk&#34;这样的东西。这非常有意义,因为它不能简单地在表格中显示Project对象。

在我的班级项目中,我有一个getter&#34; getName()&#34;。所以我的问题是:有什么办法可以改变我的第二个声明,以便表格会输入项目的名称吗?我读了几个关于setCellValueFactory()方法的帖子,但我仍然无法解决问题。

1 个答案:

答案 0 :(得分:3)

cellFactory

外,请使用cellValueFactory
tableColumns[1].setCellValueFactory(
    new PropertyValueFactory<DiaryEntry,Project>("project")
);
tableColumns[1].setCellFactory(col -> new TableCell<DiaryEntry, Project>() {
    @Override
    protected void updateItem(Project project, boolean empty) {
        super.updateItem(project, empty);
        if (empty) {
            setText(null);
        } else {
            setText(project.getName());
        }
    }
});

cellValueFactory告诉列在其单元格中显示的值; cellFactory告诉它如何显示该值。