![](/img/trans.png)
[英]Work with Value from PropertyValueFactory in TableView - JavaFx
[英]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 视图绑定的属性,如ObjectProperty
或StringProperty
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.