当前位置: 首页 > 知识库问答 >
问题:

添加重复项时,如何在TableView中更新行(而不是添加新行)?[JavaFX][重复]

方恺
2023-03-14

当您将一个项目添加到一个ObservableList中(该列表显示在TableView中)时,如何在添加重复项目时更新行?

例如,考虑一个包含三个列的TableView:项目、数量和价格。这可以通过以下代码来实现:

@FXML
TableColumn itemColumn;
@FXML
TableColumn qtyColumn;
@FXML
TableColumn priceColumn;

TableView orderTable;
ObservableList orderList = FXCollections.observableArrayList();


public void addItem(String a, int b, Double c) {
    Item entry = new Item(a, b, c);
    currentOrderTable.getItems().add(entry);
}
@Override
public void initialize(URL location, ResourceBundle resources) {
    itemColumn.setCellValueFactory(new PropertyValueFactory<Item, Integer>("item"));
    qtyColumn.setCellValueFactory(new PropertyValueFactory<Item, String>("quantity"));
    priceColumn.setCellValueFactory(new PropertyValueFactory<Item, Double>("price"));
    orderTable.setItems(orderList);
}

在其当前形式中,您可以得到如下表:

项目 --------- 数量 ----- 价格。
炒面----- 1 ----------- 4.20。
泰国-------- 1 ----------- 5.50。
炒面----- 1 ----------- 4.20。
泰国-------- 1 ----------- 5.50。

但我要找的是这样一张桌子:

项目------数量------价格<炒面----1----8.40<泰文----1----11.00。

共有1个答案

向杜吟
2023-03-14

扫描表中的项目以查看是否存在现有项目:

public void addItem(String itemName, int quantity, Double price) {

    Item entry = currentOrderTable.getItems().stream()
        .filter(item -> item.getItem().equals(itemName))
        .findAny()
        .orElseGet(()-> {
             Item newItem = new Item(itemName, 0, 0);
             currentOrderTable.getItems().add(newItem);
             return newItem ;
        });

    entry.setQuantity(entry.getQuantity() + quantity)
    entry.setPrice(entry.getPrice() + price);


}
 类似资料:
  • 当我添加一个部件时,它会添加到arraylist中,但是tableview不会更新。我在顶部有一个搜索字段,如果我按下按钮,它会显示新项,但我所尝试的任何东西都不会让表刷新并在添加新项时显示新项。 这是主控制器 inventory类有一个零件的静态arraylist 编辑: 如果所有工作都在主控制器内完成,所有工作都很好。例如,如果我删除上面的整个搜索代码,并将其替换为以下两行(按下后在主控制器上

  • 这是我在ionic应用程序中使用的代码,用于从FireBase中提取产品。 一个例子: 如果我有这样的项目列表: null 项目1 项目2 项目3 项目4 项目1 项目2 项目3 项目4 我不知道它为什么这样做,任何帮助将是非常感谢的。

  • 我的TableView没有更新,我需要一个监听器吗?(m是我的模型) 在一个新的阶段,我在我的模型列表中添加了一些Mitarbeiter 但是另一个阶段的TableView没有更新新数据。最后,观察列表不是指向模型中的ArrayList吗?

  • 以下是我的现状: 我收到了一长串数据,其中包含名称和值,以及相应的值ID。ID的数量对于呈现的数据可能会有所不同,但对于整个集合来说是恒定的。(这个集合每个名称正好有2个值)。问题是,名称重复,但ID不重复。然后我的问题变成了, 如何转换如下所示的表: 更像这样: 注意:我很难想出这个问题的标题。

  • 我已经看到了这个答案,并且正在使用它所建议的解决方案,但仍然得到相同的错误。 我有一个对用户表有外键约束的代理表,这是代理表: 这是我的实体: 现在,我想为现有用户添加一个新代理: <代码>\u上下文。SaveChanges() 行引发以下异常: "无法添加或更新子行:外键约束失败(\"dbName\".\"agent\", CONSTRAINT\"FK_Agency_User\"FOREIGN

  • 我已经用FXML定义了一个tableview。它类似于以下内容: Action列将在每一行中包含带有文本“Delete”的按钮。我有两个问题: 如何将此删除按钮添加到JavaFX中的每一行最后一个单元格? 如何获取已单击“删除”按钮的行的索引?(以便删除该行或进行其他事件处理工作)