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

ageColumn.setCellFactory(param -> new TableCell(){ @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;"); } } }); 

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

你可以做

 Person person = getTableView().getItems().get(getIndex()); 

你也可以这样做

 Person person = (Person) getTableRow().getItem(); 

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

显然,这些只有在emptyfalse才有效,所以它们应该在检查中:

 ageColumn.setCellFactory(param -> new TableCell(){ @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(""); } } } });