如何在CellFactory的updateItem()中获取行值

Mat*_*ari 6 java javafx

ageColumn.setCellFactory(param -> new TableCell<Person, String>(){
    @Override
    protected void updateItem(String item, boolean empty) {
        param.getCellFactory().
        super.updateItem(item, empty);
        setText(empty ? null : String.valueOf(item));

        if(person.getName.equals("MATEUS")) {
            setStyle("-fx-background-color: red;");
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

如何获取表中行值的"Person"?我只能从单元格中获取值,但不能从整个对象中获取值.

Jam*_*s_D 12

你可以做

Person person = getTableView().getItems().get(getIndex());
Run Code Online (Sandbox Code Playgroud)

你也可以

Person person = (Person) getTableRow().getItem();
Run Code Online (Sandbox Code Playgroud)

但这不太可取(在我看来)因为getTableRow()返回原始类型,因此它需要未经检查的向下转换.

显然,这两种唯一的作品,如果emptyfalse,那么他们应该是一个内部的检查:

ageColumn.setCellFactory(param -> new TableCell<Person, String>(){
    @Override
    protected void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);
        if (empty) {
            setText(null);
            setStyle("");
        } else {
            setText(item);
            Person person = getTableView().getItems().get(getIndex());
            if(person.getName.equals("MATEUS")) {
                setStyle("-fx-background-color: red;");
            } else {
                setStyle("");
            }
        }
    }
});
Run Code Online (Sandbox Code Playgroud)