繁体   English   中英

JavaFX TableView PropertyValueFactory 错误

[英]JavaFX TableView PropertyValueFactory Error

我在我的 JavaFX 中遇到了一个简单的问题,它以某种方式不起作用, PropertyValueFactory无法从类中获取我的ID :这是我的控制器:

public TableColumn ItemIDTableColumn;

ItemIDTableColumn.setCellValueFactory(new PropertyValueFactory<ReceiptItem, String>("mItemID"));
ItemIDTableColumn.setCellFactory(stringCellFactory);
ItemTableView.setItems(ReceiptItem);

Callback<TableColumn, TableCell> stringCellFactory =
                new Callback<TableColumn, TableCell>() {
                    @Override
                    public TableCell call(TableColumn p) {
                        MyStringTableCell cell = new MyStringTableCell();
                        cell.addEventFilter(MouseEvent.MOUSE_CLICKED, new MyEventHandler());
                        return cell;
                    }
                };

class MyStringTableCell extends TableCell<ReceiptItem, String> {

    @Override
    public void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);
        setText(empty ? null : getString());
        setGraphic(null);
    }

    private String getString() {
        return getItem() == null ? "" : getItem().toString();
    }
}

这是我的班级:

package ModelData;

public class ReceiptItem {
    private String mItemID;

    public String getmItemID() {
        return mItemID;
    }

    public void setmItemID(String mItemID) {
        this.mItemID = mItemID;
    }
}

正如这里看到的,我正在使用 getter 和 setter,所以有人知道有什么问题吗?

PropertyValueFactory期望 getter 方法中属性名称的第一个字母为大写。 在本例中,它查找名为getMItemID的方法。 您的方法称为getmItemID但是...

请注意,对ReceiptItem更新不会自动更新TableView ,因为您没有提供mItemIDProperty方法来返回包装属性值的属性对象。

我的控制器类名称是ControllerPreviewInvoice.java ,我从类FinalProduct获取我的表列的数据......这是在控制器类中定义的

后来我发现FinalProduct类应该是 public 并像FinalProduct.java一样单独定义......我使用的是 IntelliJ IDEA IDE,所以它建议我这样做,并且它工作......它现在开始加载列中的所有数据.

文档

 TableColumn<Person,String> firstNameCol = new TableColumn<Person,String>("First Name"); firstNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("firstName"));

在此示例中,“firstName”字符串用作对 Person 类类型(即 TableView 项目列表的类类型)中假定的 firstNameProperty() 方法的引用。

您对PropertyValueFactory使用:

new PropertyValueFactory<ReceiptItem, String>("mItemID")

会寻找

ReceiptItem.mItemIDProperty()

Getter 和 setter 遵循getFoo()setFoo()的典型命名约定。 Java 8 / JavaFX 为“属性获取器”引入了一个约定,它遵循命名约定fooProperty() ,并返回一个可以由 JavaFX 视图绑定的属性,如ObjectPropertyStringProperty

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM