正确使用 setCellValueFactory

correct usage of setCellValueFactory

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

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

所以第一个工作得很好。它使用我的 class "DiaryEntry" 中的 getUsername() 方法来显示字符串。第二个是使用方法 getProject() 并尝试将项目添加到我的 table。这样做时,我最终会得到类似“2xProject2353asxk”的东西。这很有意义,因为它不能简单地在 table.

中显示 Project 对象

在我的 Class 项目中,我有一个 getter "getName()"。所以我的问题是:有什么方法可以更改我的第二个语句,以便 table 将输入项目名称?我阅读了几个关于 setCellValueFactory() 方法的线程,但我仍然无法找到解决方案。

除了 cellValueFactory

之外还使用 cellFactory
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 告诉它如何 显示值。