我正在尝试使用特定菜单项的价格来填充tablePrice
列。下面显示的代码工作正常,但我必须在MenuItem
类中创建一个以前不存在的价格变量。 MenuItem
和PricedMenuItem
以及其他类是从餐馆管理系统的UML域模型生成的。由于我正在修改域模型,因此不鼓励使用此当前方法。
评论部分显示我在setCellValueFactory()
上出现错误的程度。有TableView
包含不同类的列的方法吗?如果是这样,有人可以帮助我直接从PricedMenuItem
课程填写专栏吗?
MenuItem
有一个私有name
和itemCategory
枚举,以及getCurrentPricedMenuItem()
方法。
PricedMenuItem
有私有price
和getPrice()
方法。
@FXML private TableView<MenuItem> tableView;
@FXML private TableColumn<MenuItem, String> tableName;
@FXML private TableColumn<MenuItem, Double> tablePrice;
@FXML private TableColumn<MenuItem, ItemCategory> tableCategory;
@Override
public void initialize(URL location, ResourceBundle resources) {
tableName.setCellValueFactory(new PropertyValueFactory<MenuItem, String>("Name"));
tableCategory.setCellValueFactory(new PropertyValueFactory<MenuItem, ItemCategory>("itemCategory"));
tablePrice.setCellValueFactory(new PropertyValueFactory<MenuItem, Double>("price"));
/*way to retrieve price directly from PMI
tablePrice.setCellValueFactory(new Callback<CellDataFeatures<MenuItem, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call( CellDataFeatures<MenuItem, String> c) {
return new SimpleStringProperty(c.getValue().getValue().getCurrentPricedMenuItem().getPrice()+"");
}
});
*/
categoryDropDown1.getItems().setAll(ItemCategory.values());
categoryDropDown2.getItems().setAll(ItemCategory.values());
tableView.setItems(loadCurrentMenuItems());
updateBox("Select a menu item to edit.", Color.BLACK);
}
答案 0 :(得分:0)
将tablePrice
声明为
@FXML private TableColumn<MenuItem, Number> tablePrice;
(请参阅JavaFX Properties in TableView了解原因)。
然后单元格值工厂应该返回Property<Number>
(你的回复Property<String>
),所以你需要
tablePrice.setCellValueFactory(new Callback<CellDataFeatures<MenuItem, Number>, ObservableValue<Number>>() {
@Override
public ObservableValue<Number> call( CellDataFeatures<MenuItem, Number> c) {
return new SimpleDoubleProperty(c.getValue().getCurrentPricedMenuItem().getPrice());
}
});
或者,使用lambda表达式去除大部分样板代码
tablePrice.setCellValueFactory(cellData ->
new SimpleDoubleProperty(cellData.getValue().getCurrentPricedMenuItem().getPrice()));
(我很确定你不应该在那里进行两次getValue()
次调用......但你没有发布你的模型类。)