JavaFX TableView属性值工厂错误

JavaFX TableView属性值工厂错误,java,javafx,tableview,Java,Javafx,Tableview,我在JavaFX中遇到了一个简单的问题,不知何故它不起作用,PropertyValueFactory无法从类中获取我的ID:这是我的控制器: public TableColumn ItemIDTableColumn; ItemIDTableColumn.setCellValueFactory(new PropertyValueFactory<ReceiptItem, String>("mItemID")); ItemIDTableColumn.setCellFactory(stri

我在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();
    }
}
如图所示,我使用的是getter和setter,所以有人知道问题出在哪里吗?

来自:

将查找

ReceiptItem.mItemIDProperty()

getter和setter遵循典型的命名约定,即
getFoo()
setFoo()
。Java8/JavaFX为“属性getter”引入了一个约定,它遵循命名约定
fooProperty()
,并返回一个可以被JavaFX视图绑定的属性,如a或a。

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


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

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


后来我发现,FinalProduct类应该是公共的,并且像FinalProduct.java一样单独定义。。。我用的是IntelliJ IDEA,所以它建议我这么做,而且效果很好。。。它现在开始加载列中的所有数据。

感谢您的响应,在我尝试了您的方法之后,它显示了
错误:(116,42)java:不兼容的类型:javafx.util.Callback无法转换为javafx.util.Callback
,我尝试将更改字段改为它,它提供了新的回调,它接受TableColumn和Table Cell,哪一个是不可识别的?无论如何,我不认为更改
公共TableColumn itemiddtablecolumn
将解决问题,因为当我在另一个程序中尝试时,它在不改变的情况下完美工作,我只是不知道为什么在这种情况下它不会工作。我想你误解了我的答案。我认为您需要更改原始代码的唯一内容是将
mItemID
的类型更改为
StringProperty
,并添加一个方法:
mItemIDProperty()。然后,您的getter和setter还需要更改以使用
StringProperty
.get()
.set()
方法。从您的回答来看,您似乎试图合并我从javadoc复制的示例代码,这只是为了演示
PropertyValueFactory
构造函数试图加载的内容。我不确定这篇文章是否发布到了正确的问题。你应该检查一下。你的评论似乎与手头的话题完全无关。
TableColumn<Person,String> firstNameCol = new TableColumn<Person,String>("First Name");
firstNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("firstName"));
new PropertyValueFactory<ReceiptItem, String>("mItemID")
ReceiptItem.mItemIDProperty()