gpt4 book ai didi

JavaFX:如何将计算的整数值添加到 TableColumn

转载 作者:行者123 更新时间:2023-12-02 12:04:40 25 4
gpt4 key购买 nike

我有一个账单表,我想在其中列出账单上的所有产品。我保存了ProductInBill ArrayList<ProductInBill> 内的对象在账单上。

当我创建TableView时我的常用方法是创建 JavaFX 字段。在 Controller 类上,我有我的字段:

@FXML public TableColumn<ProductInBill, String> finishedBillProductNameColumn;
@FXML public TableColumn<Integer, Integer> finishedBillProductNumberColumn;
@FXML public TableColumn<ProductInBill, Integer> finishedBillProductPriceBruttoLabel;
@FXML public TableColumn<Integer, Integer> finishedBillProductTotalAmountColumn;
@FXML public TableView finishedBillProductTable;

然后我使用setUp()方法,代码如下:

private void setUpFinishedBillProductTable() {
finishedBillProductNameColumn.setCellValueFactory(new PropertyValueFactory<ProductInBill, String>("productName"));
finishedBillProductPriceBruttoLabel.setCellValueFactory(new PropertyValueFactory<ProductInBill, Integer>("productPrice"));
}

还有一个 updateBillTable()加载必要的方法ProductInBill对象,将它们保存到 TableList 并将其提供给表。

 private void updateFinishedBillProductTable(Bill bill) {

LOG.info("Start reading all Products from Bill");

for(ProductInBill product : bill.getProducts()){
finishedBillProductCurrent.add(product);
}
finishedBillProductTable.getItems().clear();


if(!finishedBillProductCurrent.isEmpty()) {
for (ProductInBill p : finishedBillProductCurrent) {
finishedBillProductTableList.add(p);
}

//here i want to calculate some other Integer values based on the ProductInBill values and insert them to the table too.

finishedBillProductTable.setItems(finishedBillProductTableList);
}
}

这一切都运行得很好。我现在的问题是,我的 TableView 上也有一个字段计算出的整数值我不想保存在对象中。

finishedBillProductNumberColumn 为例。我想迭代我的 ArrayList ,查找所有具有相同名称的产品并将相同项目的数量填充到表中。

我该怎么做?我只找到了必须使用对象中的值将某些内容插入到我的 TableView 的解决方案。

最佳答案

您只需为这些情况编写一个自定义 CellValueFactory,而不是使用预制的。使用PropertyValueFactory只是用成员填充单元格的便捷捷径。

举个例子:

 finishedBillProductNameColumn.setCellValueFactory(new PropertyValueFactory<ProductInBill, String>("productName"));

只是一种更短的方法:

finishedBillProductNameColumn.setCellValueFactory( cellData -> {
ProductInBill productInBill = cellData.getValue();
return data == null ? null : new SimpleStringProperty(productInBill.getProductName());
});

话虽这么说,我 100% 偏好第二种语法。因为在第一个上,如果您重命名成员,而您忘记在那里更改它,那么直到您进入应用程序时您才会知道有错误。另外,它允许显示与成员不同的值。

作为 finishedBillProductNumberColumn 的具体示例,您可以这样做:

首先更改定义(第一个泛型类型是通过 cellData.getValue() 接收的类型:

@FXML public TableColumn<ProductInBill, Integer> finishedBillProductNumberColumn;

然后定义您想要的 CellValueFactory,例如:

finishedBillProductNumberColumn.setCellValueFactory( cellData -> {
ProductInBill productInBill = cellData.getValue();

if(productionInBill != null){
Long nbProduct = finishedBillProductTable.getItems().stream().filter(product -> product.getProductName().equals(productInBill.getProductName())).count();

return new SimpleIntegerProperty(nbProduct.intValue()).asObject();
}
return null;
});

希望对您有帮助!

关于JavaFX:如何将计算的整数值添加到 TableColumn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46990149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com