我的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,所以任何人都知道这是什么问题?
答案 0 :(得分:1)
PropertyValueFactory
期望getter方法中属性名的第一个字母为大写。在这种情况下,它会查找名为getMItemID
的方法。您的方法称为getmItemID
但是......
请注意,对ReceiptItem
的更新不会自动更新TableView
,因为您没有提供mItemIDProperty
方法返回包装属性值的属性对象。
答案 1 :(得分:0)
TableColumn<Person,String> firstNameCol = new TableColumn<Person,String>("First Name"); firstNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("firstName"));
在此示例中,“firstName”字符串用作Person类类型中假定的firstNameProperty()方法的引用(这是TableView项列表的类类型)。
您对PropertyValueFactory
的使用:
new PropertyValueFactory<ReceiptItem, String>("mItemID")
将查找
ReceiptItem.mItemIDProperty()
Getters和setter遵循getFoo()
和setFoo()
的典型命名惯例。 Java 8 / JavaFX引入了遵循命名约定fooProperty()
的“属性getter”约定,并返回一个可以由JavaFX视图绑定的属性,如ObjectProperty
或StringProperty
。
答案 2 :(得分:-1)
我的控制器类名称为“ ControllerPreviewInvoice.java”,我正在从控制器类中定义的类“ FinalProduct”中获取表列的数据...
后来,我发现FialProduct类应该是公共的,并像“ FinalProduct.java”一样单独定义。。。我使用的是IntelliJ IDEA IDE,因此它建议我这样做,并且它起作用了……开始加载所有现在列中的数据。