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

标签 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;");
        }
    }
});

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

最佳答案

你可以做到

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

你也可以这样做

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

但这不太可取(在我看来),因为 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("");
            }
        }
    }
});

关于java - 如何在 CellFactory 的 updateItem() 中获取行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33392811/

相关文章:

java - 如何使用正则表达式捕获空字段?

java - 如何在不使用实体类的情况下使用 EclipseLink 与表进行交互?

java - 我从基于 Java 的 AWS lambda 处理程序启动一个单独的线程,有时会完成,有时不会,为什么?如何保证线程完成?

javafx - 如何调用绑定(bind)属性的方法

javafx - CSS 错误解析(预期 LBRACE 位于 [1,9] )

java - 当我只能访问对象的一个​​字段时,如何返回该对象?

java - 为什么我的 GUI 不能正常工作?

转换后的 Maven 项目中文件的 JavaFx InvocationTargetException

javafx - 选择组合框项目时执行操作 FXML

javafx - 按名称对 TreeView 排序